【发布时间】:2011-09-26 04:57:01
【问题描述】:
Rails 专家,您知道我一直在努力解决的这个问题的标准解决方案吗?
在我的应用中,用户可以为他的对象定义属性。因此,在生成他的对象列表(假设它们是书)之前,他可以指定他关心的属性及其潜在值,然后对于每本书,他必须为每个属性输入一个合法值。所以说我输入了我的属性:长度(合法值“长”、“短”)和难度(“容易”、“难”)。在不同的书架上,不同的书籍列表可能具有不同的属性(封面颜色“蓝色”或“红色”)
所以现在我处于我的书本形式。 “在这个书架上添加新书。”在部分方面,我提出了与这个书架上的一本新书相关的属性列表(长度和难度)。然后我查找每个属性的合法值。我有一个选择下拉列表,用户可以在其中选择一个:
<% for prop in @book.properties %>
<%= prop %> :
<%= f.collection_select :prop_value_select, prop.legal_property_values, :id, :name %>
<%end %>
在我的书籍模型中,我定义了一个虚拟属性,它将创建“连接记录”PropertyValue。 PropertyValue 有 legal_property_value_id 和 book_id。
def prop_value_select=(incoming_id_from_form)
PropertyValue.create!(:legal_property_value_id => incoming_id_from_form, :book=> self)
end
整个方案都有效,除了我的方法只在表单提交时为第一个属性调用一次,而不是为每个属性调用一次。
我绞尽脑汁……看起来很简单,但是标准的 Rails 方法是什么?
- 将所有属性收集到一个数组中并生成模型作为回调?
- 每个属性都有部分魔法?
谢谢!
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3