2013-01-15 19 views
2

如果我有一个模型,其中一个属性可以设置只对几个预定义的值,如:如何在一个表单中显示可枚举属性的选项?

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 %> 

谢谢你的时间。

回答

2

我想你可以做这样的事情:

<%= 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 %> 
+0

我给它一个试试吧!但是将':value =>'设置为'sale_status'似乎没有改变复选框提交的值;所有方块都会返回值“1”而不是“待售”或“已售出”:'' – hlh

+1

试试这个:'<%= painting.radio_button:status,sale_status%>'(与check_box相同) – MrYoshiji

+0

这很有效,谢谢你的帮助。只要确保我明白了这一点 - radio_button或check_box的第二个参数确定提交哪个值? [这些API的条目](http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-radio_button)对我来说有点令人困惑。 – hlh

相关问题