【问题标题】:Rails Simple Form Checkbox variable undefinedRails 简单表单复选框变量未定义
【发布时间】:2025-11-30 11:25:01
【问题描述】:

我正在创建一个具有两个字段的 Rails 简单表单:一个集合和一个复选框。集合内的值是根据复选框是否被选中来确定的。

<%= f.input :id, :collection => (@s if show_all_shoppers || @rs), :label_method => :name, :value_method => :id, :label => "Shopper", :include_blank => true %>

<%= f.input :show_all_shoppers, :as => :boolean, :label => false, :input_html => { :'data-label' => 'Display all shoppers'} %>

但是,当我尝试这个时,我不断收到undefined local variable or method show_all_shoppers。请注意:id 是我模型实例中的字段名,但show_all_shoppers 不是

我该如何纠正这个问题?

【问题讨论】:

    标签: ruby-on-rails twitter-bootstrap simple-form


    【解决方案1】:

    确切地说,我不知道您要做什么,但是在选中复选框时应该执行一些 javascript。在您的模型中创建一个attr_accessor,如下所示:

    attr_accessor :show_all_shoppers
    

    然后在你的表单中你可以这样做:

    <%= f.input :show_all_shoppers, :as => :boolean, :label => false, :input_html => { :'data-label' => 'Display all shoppers'} %>
    

    还有另一种解决方案,但我从未尝试过,所以不知道是否可行:

    <%= f.input :show_all_shoppers do %>
      <%= check_box_tag 'show_all_shoppers', 'Display all shoppers', false %>
    <% end %>
    

    来源:Rails Simpleform with non-model inputs

    也许你可以试一试。

    希望这会有所帮助。

    【讨论】:

    • 是的,我在表单提交中不需要这个值。但我收到此错误:# 的未定义方法 `check_box_tag'
    • 其实答案是rails form,你使用的是simple_form,我不知道。尝试更新的答案
    • 如果我不想在提交表单时使用这个值,是否需要创建 attr_Accessor?
    • end 中永远不会有= 它总是&lt;% end %&gt; 而不是&lt;%= end %&gt; 关于attr_accessor 我不确定但没有找到任何其他选择而不是这个对于simple_form
    【解决方案2】:
    <%= check_box_tag 'show_shoppers', 'show_all_shoppers', false %><small> Show All Shoppers</small>
    

    与对 javascript/jquery 的编辑一起使用

    【讨论】: