【问题标题】:How can the options for an enumerable attribute be displayed in a form?可枚举属性的选项如何在表单中显示?
【发布时间】:2013-01-15 19:05:11
【问题描述】:

如果我有一个模型,其中一个属性只能设置为几个预定义的值,如下所示:

class Painting < ActiveRecord::Base
  SALE_STATUS = ["for sale", "sold"]
  validates_inclusion_of :status, :in => SALE_STATUS
end

有没有办法编写 ERb/HTML 表单,以便 status 的输入字段仅显示每个可用选项的单选按钮或复选框?

<%= form_for @painting do |painting| %>
  <%= painting.check_box :status # ... don't know how to implement!
<% end %>

感谢您的宝贵时间。

【问题讨论】:

    标签: ruby-on-rails enums erb


    【解决方案1】:

    我认为你可以这样做:

    <%= form_for @painting do |painting| %>
      <% Painting::SALE_STATUS.each do |sale_status| %>
        <%= painting.check_box :status, sale_status %>
      <% end %>
    <% end %>
    

    但此代码允许用户不选择任何销售状态。如果您想允许状态为空值,请将其添加到您的模型中:

    validates_inclusion_of :status, :in => SALE_STATUS, :allow_nil => true
    

    如果没有,请改用单选按钮:

    <%= form_for @painting do |painting| %>
      <% Painting::SALE_STATUS.each do |sale_status| %>
        <%= painting.radio_button :status, sale_status %>
      <% end %>
    <% end %>
    

    【讨论】:

    • 我试了一下!但是将:value =&gt; 设置为sale_status 似乎并没有改变复选框提交的值;所有盒子都返回值“1”而不是“待售”或“已售”:&lt;input id="painting_sale_status" name="painting[sale_status]" type="checkbox" value="1" /&gt;
    • 试试这个:&lt;%= painting.radio_button :status, sale_status %&gt;(与复选框相同)
    • 这行得通,感谢您的帮助。只要确保我理解这一点 - radio_button 或 check_box 的第二个参数确定提交哪个值? API entry for these 让我有点困惑。
    • 是的,文档令人困惑,因为它谈论的是辅助方法check_box,而不是f.check_box(其中f 来自form_for)。您不需要第一个参数“object_name”,因为您将 form_for 与对象 @painting 一起使用
    猜你喜欢
    • 2017-04-21
    • 2011-09-08
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    相关资源
    最近更新 更多