【问题标题】:Ruby on Rails - conditionally checking check_box_tagRuby on Rails - 有条件地检查 check_box_tag
【发布时间】:2014-11-27 13:15:13
【问题描述】:

我正在尝试根据来自服务器的实例变量 @ratings_filter 有条件地将 check_box_tag 标记为已检查。我不能使用 Javascript,所以我在控制器上做的是实例化 @ratings_filter 设置它等于 session[:ratings]。然后在视图中,我告诉 check_box_tag 函数将框设置为标记,如果 @ratings_filter 为 nil(默认情况下,它应该显示全部)或者如果它的哈希值为 true(这意味着它被用户标记,因此应该显示)

= form_tag movies_path, :id => :ratings_form, :method => :get do
  Include:
  - @all_ratings.each do |rating|
    = rating
    = check_box_tag "ratings[#{rating}]", (@ratings_filter.nil? or @ratings_filter[rating] == true ? true : false) , :id => "ratings_#{rating}"
  = submit_tag 'Refresh', :id => 'ratings_submit'

这种方法不起作用,我找不到问题所在。 任何帮助将非常感激。谢谢。

【问题讨论】:

  • :id => :ratings_#{rating} 这只会给你:ratings_ 符号
  • 替换但同样的问题:= check_box_tag "ratings[#{rating}]", (@ratings_filter.nil? or @ratings_filter[rating] == true ? true : false) , :id => “评分_#{评分}”

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


【解决方案1】:

请注意,代码::id => :ratings_#{rating} 只会给您:ratings_ 符号,即在 代码中您将拥有:id="ratings_",请将代码修复为:id => :"ratings_#{rating}"

接下来,根据documentation#check_box_tag helper 的方法通过第三个参数而不是第二个参数接受检查的属性状态,第二个(强制)参数是值,它将通过请求传递给服务器。所以代码将是:

check_box_tag "ratings[#{rating}]", "1", @ratings_filter.try(:fetch, rating) != false , :id => :"ratings_#{rating}"

【讨论】:

  • 非常感谢。我认为第二个参数是可选的
  • @StringerBell 第二个参数将通过请求传递给服务器
  • @StringerBell 和所有不相等的参数(从 begin 开始)都是强制性的
猜你喜欢
  • 2014-09-01
  • 2011-01-23
  • 2014-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多