我想制作一个基于check_boxes的表单,如果'@clans'数组不是nil并且它包含给定复选框的'value',我想要检查它。
我的第一个问题是:
<%= check_box_tag 'clans[]','Feniks', true if !@clans.nil? and @clans.include? 'Feniks' %>
但是当@clans为nil时,check_box会消失,就像它被禁用一样。
我设法用这样的代码来解决它:
<% if !@clans.nil? and @clans.include? 'Feniks' %>
Feniks: <%= check_box_tag 'clans[]','Feniks', true %>
<% else %>
Feniks: <%= check_box_tag 'clans[]','Feniks' %>
<% end %>
但它看起来很糟糕,必须有更好的方法来写这个:)
请告诉我如何处理:)
答案 0 :(得分:0)
将if
逻辑包裹在括号内。
<%= check_box_tag 'clans[]','Feniks', (true if !@clans.nil? and @clans.include? 'Feniks') %>
在您的代码中,if
作为修饰符使用。像print 10 if x.present?
一样。在此示例中,如果x
不是空白,则会发生此方法调用print(10)
,否则不会。同样的类比也适用于您的情况。在 erb 标记内,您的代码被解释为:
<%= check_box_tag('clans[]','Feniks', true) if <condition> %>
这就是为什么当 condition 为真时,check_box_tag
方法被调用,否则不被调用。您可以将整个if
部分写为:
<%= check_box_tag 'clans[]','Feniks', @clans.try(:include?, 'Feniks') %>