rails check_box_tag disapear

时间:2015-05-31 04:44:45

标签: ruby-on-rails checkbox

我想制作一个基于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 %>

但它看起来很糟糕,必须有更好的方法来写这个:)

请告诉我如何处理:)

1 个答案:

答案 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') %>