【问题标题】:Preselect Check box with Rails Simple_form使用 Rails Simple_form 预选复选框
【发布时间】:2011-05-06 05:02:04
【问题描述】:

我在 Rails 3 中使用Simple_Form,它很棒。我有一个简单的问题。如果类型在幕后是布尔值,我可以使用f.input 创建一个复选框。但是,我希望它被预选为 true。

有没有办法通过视图做到这一点?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 checkbox


    【解决方案1】:

    如果您不想或无法更新迁移以执行“PerfectlyNormal”的答案,则可以将以下内容添加到 f.input 的末尾:

    :input_html => { :checked => true }
    

    所以,它会变成:

    = f.input :some_flag, :input_html => { :checked => true }
    

    希望有帮助!

    【讨论】:

    • 如果数据库中不存在表单的值,这是最好的解决方案...
    【解决方案2】:

    最好的方法是在你的模型中设置默认值,比如

    create_table :my_table do |t|
      ...
      t.boolean :my_boolean, :default => true
      ...
    end
    

    simple_form 会选择哪个,并将复选框设置为默认选中。

    一个更简单的方法是按照 Dave 所说的那样做,只需将值强制为 1,但如果验证失败,并且您再次显示表单,它仍然会被检查,无论它在表单显示时的外观如何已提交。

    【讨论】:

    • 实际上这是可行的,但它涉及到更多的东西,数据库上有一个默认值。我认为这里最好的选择是仅在客户端通过 :input_html => { :checked => true } 选择值
    • 这是一个更好的答案。
    【解决方案3】:

    它对我有用,它只选中一个复选框,值为 "None"

    <%= f.input :notify, label: "Notification", as: :check_boxes, collection: ["None", "Daily", "Weekly", "Monthly", "Quarterly", "Yearly"], :item_wrapper_class => 'inline', :checked => ["None", true] %>
    

    【讨论】:

    • 对于 :checked => ["None", true],不需要 true,因为 :checked 在提供的数组中查找具有值的 HTML 输入元素。忽略 true 工作正常。 &lt;%= f.input :notify, label: "Notification", as: :check_boxes, collection: ["None", "Daily", "Weekly", "Monthly", "Quarterly", "Yearly"], :item_wrapper_class =&gt; 'inline', :checked =&gt; ["None"] %&gt;
    【解决方案4】:

    我只是偶然发现了这篇文章,对我有用的方法与最新答案相似 - 但更短。只需使用希望的设置初始化对象:

    def new
      Object.new(my_boolean: true)
    end
    

    【讨论】:

      【解决方案5】:

      这应该可行:

      = f.input :some_flag, :input_html => { :value => '1' }
      

      【讨论】:

      • -1 因为真的会弄乱任何用于编辑的数据库表单,所以这真的不是一个好建议。
      • 真的吗?伙计问如何在视图中设置它。它在哪里说他要编辑它?
      • 嗨 Dave,在 rails 中,视图代表浏览器中显示的前端 html。当 Drew 说“如果类型在幕后是布尔值”时,这似乎暗示这与活动记录模型背道而驰,而对任何活动记录模型使用复选框似乎意味着他希望编辑/更新属性。但是,我不会对您投反对票,因为这似乎有点小气。
      • 你应该使用input_html: { checked: true }
      【解决方案6】:

      在我看来,这样做的方法是在控制器中设置属性的值:

      @some_object.some_flag = 1

      【讨论】:

      • 我想大多数人会说这个逻辑属于模型。
      • 我会说,这取决于。强参数在控制器中定义。因此,您的标志值可能取决于当前上下文。 ?
      【解决方案7】:

      对于 Rails 6+,您可以这样做:

      <%= f.check_box :remember_me,  checked: true %>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-26
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-06
        相关资源
        最近更新 更多