我有这个模型:Store
和Address
。
第二个模型Address
我在其他模型中使用它,并且内部有一些自定义字段用于不同的模型。
是的,就像多态,但没有Class的varchar
字段,我使用的是整数。 (优化的东西)
现在我的Store
模型中的关联如下:
class Store < ActiveRecord::Base
has_many :addresses, :foreign_key => "parent_id", :conditions => ['parent_kind = ?', 2]
accepts_nested_attributes_for :addresses
end
现在在我的控制器中我做了:
@store.addresses.build
我可以在表单中使用f.fields_for :addresses...
。
当我提交表单并将数据保存到数据库时,问题就出现了。
stores
表中的记录已保存,addresses
中的记录随商店的parent_id
一起保存,但parent_kind
位于{{ 1}}这是MySQL上该属性的默认值。
我的快速修复是这样的:
0
但我知道必须有另一种方式。
Anny建议?
感谢。
答案 0 :(得分:2)
您是否尝试在嵌套表单中使用隐藏字段?
<%= f.fields_for :addresses, Address.new do |ff| %>
<%= ff.hidden_field :parent_kind, :value => 2 %>
...
修改强>
如果您出于安全考虑而不想使用它,这可能是另一种可能有用的方法。您可以尝试使用association callback,例如:
class Store < ActiveRecord::Base
has_many :addresses, :foreign_key => "parent_id",
:conditions => ['parent_kind = ?', 2],
:before_add => Proc.new { |store,address| address.parent_kind = 2}
accepts_nested_attributes_for :addresses
end