在我的Rails 3应用程序中,我有许多模型,其列具有有限的选择(IE是选择框)。在这些情况下,为了管理选择而创建另一个模型和与原始模型的关系似乎有些过分。
我能想到的一个选择就是创建一个选择框并在那里做出选择,但这似乎不是很干。有没有人有一个很好的建议如何处理这种情况?
感谢您的光临。
答案 0 :(得分:14)
您可以在模型中创建常量
# formatted as an array of options, option being an array of key, value
OPTIONS = [['Email', 'email'], ['Text', 'text'], ['Email and Text', 'both']]
validates_inclusion_of :field, :in => OPTIONS
然后可以使用它轻松填充视图中的选择菜单
使用formtastic的例子
<%= f.input :field, :as => :select, :collection => Model::OPTIONS %>
答案 1 :(得分:7)
我通常在模型中使用常量列表来执行此操作。
class Model < ActiveRecord::Base
PROPERTY_OPTIONS = ['Option One', 'Option Two', ...]
validates_inclusion_of :property, :in => PROPERTY_OPTIONS
end
在视图中:
<%= f.select :property, Model::PROPERTY_OPTIONS %>
答案 2 :(得分:1)
您还可以使用enum_column插件:https://github.com/electronick/enum_column
然后,您可以在视图中呈现您的选择框,如下所示:
<%= f.select :status, Model.columns_hash['status'].limit %>
(其中Model是一个示例模型名称,例如Book或Product,或者您的应用程序实际上是什么。)
答案 3 :(得分:0)
在某些情况下,我将创建一个选项哈希并使用类方法来显示和设置它们。例如,具有不同状态的问题模型可以这样完成:
def self.statuses
{:open => 1, :closed => 2}
end
然后,您只需将整数值存储在模型的status_id中。您也可以配置getter / setter。