当您向控制器提交表单以保存ActiveRecord时,您可以通过@foo.field = 'bar'
添加缺少的字段。我想对嵌套属性做同样的事情,但我无法弄清楚如何。
我正在尝试做类似的事情:
'@foo.bar.field = 'baz'
foo模型
accepts_nested_attributes_for :bar
如果这更有意义。
编辑:相关型号代码
class Product < ActiveRecord::Base
...
has_many :update
belongs_to :user, :foreign_key => 'user_id'
accepts_nested_attributes_for :update, :reject_if => lambda {|a| a[:body].blank?}
...
end
更新模型
class Update < ActiveRecord::Base
...
belongs_to :product, :foreign_key => 'product_id'
geocoded_by :address
reverse_geocoded_by :latitude, :longitude
validates :body, :presence => true
end
答案 0 :(得分:2)
((params[:product])["update_attributes"])["0"].merge!({"user_id" => u_id})
啰嗦,但这解决了它
答案 1 :(得分:1)
@foo.bar.field = 'baz'
不是accepts_nested_attributes_for
。您可以将before_save
验证添加到Bar
模型中,然后它将完美地用于:
bar = @foo.bar
bar.field = "baz"
bar.save
# => now before_save will be executed
通过accepts_nested_attributes_for
,它看起来像是:
@foo.bar_attributes = { :id => XXX, :field => "baz" }
@foo.save
在这种情况下,您应该将验证添加到Foo
模型