0

我有这个模型:StoreAddress

第二个模型Address我将它与其他模型一起使用,并且内部有一些用于不同模型的自定义字段。

是的,就像多态但没有varcharClass 的字段,我使用的是整数。(优化的东西)

现在在我的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_kind0其中是 MySQL 上该属性的默认值。

我的快速修复是这样的:

@store = Store.new(params[:store])
    @store.addresses[0].parent_kind = 2
    if @store.save
    ....

但我知道必须有另一种方式。

有什么建议吗?

谢谢。

4

1 回答 1

2

您是否尝试在嵌套表单中使用隐藏字段?

<%= f.fields_for :addresses, Address.new do |ff| %>
  <%= ff.hidden_field :parent_kind, :value => 2 %>
  ...

编辑

如果您出于安全考虑不想使用它,这里有另一种可能会有所帮助的方法。您可以尝试使用这样的关联回调

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 
于 2012-07-04T19:29:12.090 回答