【问题标题】:Check_box_tag - pre-checked conditional on values in @arrayCheck_box_tag - 根据@array 中的值预先检查条件
【发布时间】:2013-01-29 21:43:09
【问题描述】:

如何使用与实例变量@array 中包含的值匹配的预选框实现 check_box_tag:

= form_tag xxx_path, :method => :get do 
  - @all_names.each do |name|
    = rating
    = check_box_tag "names[#{name}]", CHECKED IF name in @array
  = submit_tag 'Refresh'

编辑 - 首先是控制器:

  def index
    if params[:ratings]
      @filtered_ratings = params[:ratings]
      @movies = Movie.find(:all, :conditions => ["rating IN (?)", @filtered_ratings], :order => params[:sort])
    else
      @movies = Movie.find(:all, :order => params[:sort])   
    end
  end

现在查看:

= form_tag movies_path, :method => :get do
  Include: 
  - @all_ratings.each do |rating|
    = rating
    = check_box_tag "ratings[#{rating}]", 1, @filtered_ratings.include?(rating) ? true : false
= submit_tag 'Refresh'

【问题讨论】:

    标签: ruby-on-rails forms model-view-controller


    【解决方案1】:

    试试这个:

    = form_tag xxx_path, :method => :get do 
      - @all_ratings.each do |rating|
        = rating
        = check_box_tag "ratings[#{rating}]", 1, @filtered_ratings.include?(rating) ? true : false
      = submit_tag 'Refresh'
    

    在控制器中:

    def index
      @filtered_ratings = params[:ratings] || [] # if no params[:ratings] then assign empty array
      @movies = Movie.order(params[:sort])
      @movies = @movies.where(rating: params[:ratings]) if params[:ratings].present?
    end
    

    【讨论】:

    • 谢谢,这看起来可以工作 - 我如何捕捉 nil 对象错误(我猜是 @array 中没有出现的框)?
    • 你有一个 nil 对象,你没想到它!您可能期望有一个 Array 的实例。评估 nil.include 时发生错误?
    • 在某些情况下,没有一个框是预先选中的。
    • @filtered_ratings - 而names 实际上是ratings
    • 您可以发布控制器的操作或发布您设置两个数组的代码部分吗? (@all_names 和您要比较的其他数组)
    猜你喜欢
    • 2015-10-30
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 2021-07-08
    • 2014-06-19
    • 2011-07-10
    • 2020-09-08
    相关资源
    最近更新 更多