【问题标题】:rails form_tag with checkboxes带有复选框的rails form_tag
【发布时间】:2012-10-13 17:51:45
【问题描述】:

我知道可能有 1 或 2 个类似的问题,但没有一个能帮助我理解我在下面的错误所在。 在我看来,我有以下haml形式:

= form_tag movies_path,:id=>"ratings_form", :method => :get do
  Include: 
  -  @all_ratings.each_with_index do |rating, index|
  = rating
  = check_box_tag "ratings[]", rating, @selected_ratings.include?(rating), id:"ratings_#{rating}"

在我的控制器中:

def index
    sorting=params[:sorting_on_a_column]
    if sorting=='1'
       @sort='title'
       @movies=Movie.order('title')
    elsif sorting=='2'
       @sort='date'
       @movies=Movie.order('release_date')
    else
       @movies=Movie.all
    end
    @all_ratings=Movie.select(:rating).map(&:rating).uniq
    @selected_ratings = (params["ratings"].present? ? params["ratings"] : @all_ratings)
    @movies = @movies.where(":rating IN (?)", params["ratings"]) if params["ratings"].present? and params["ratings"].any?
     end

我在上面的目标是按标题或 release_date(它确实)对电影进行排序,并且只显示与选中的复选框相对应的电影。我是 Ruby 和 Rails 的新手,所以非常感谢您的帮助。提前谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby forms


    【解决方案1】:

    需要考虑的一些事情:

    1 - 有多少可能的评分?您正在根据另一个模型的数据库表中显示的内容分配 @all_ratings。如果没有评级模型,并且完整的评级列表会随着时间的推移而增长,那么可能应该有。

    2 - 你可以像这样设置你的复选框标签:

    - @all_ratings.each_with_index do |rating, index|
      = label_tag "rating_#{rating}", rating
      = check_box_tag "ratings[]", rating, @selected_ratings.include?(rating), id: "rating_#{rating}"
    

    这将为您提供params["ratings"] 中的字符串值数组,这些值应该可以在您的代码中按原样工作。

    标签标签的设置使得当您单击文本时,它会选中相应的复选框。 .each_with_index 用于为每个评级提供一个唯一 ID,因为到目前为止,他们还没有来自数据库的 ID(它与 check_box_tag 中的 "rating_#{index}" id 声明相匹配)。

    【讨论】:

    • 首先,谢谢你的时间。所以我按照你说的编辑了上面的内容(我只跳过了单击复选框文本的功能),但它仍然不起作用。它说Array 中未定义的方法
    • 我设法让它以不同的方式工作,但 1 为你的帮助(当我达到代表 15 时:D)
    猜你喜欢
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 2013-04-26
    • 2014-01-09
    • 2012-01-29
    相关资源
    最近更新 更多