has_many与ActiveRecord上的条件关联

时间:2012-07-04 16:09:45

标签: ruby-on-rails-3 activerecord associations polymorphic-associations

我有这个模型:StoreAddress

第二个模型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建议?

感谢。

1 个答案:

答案 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