我尝试在更新模型时传递两级嵌套属性哈希:
class Item < ActiveRecord::Base
has_many :steps
accepts_nested_attributes_for :steps
end
class Step < ActiveRecord::Base
belongs_to :item
has_many :messages, as: :discussable
accepts_nested_attributes_for :messages
end
class Message < ActiveRecord::Base
belongs_to :discussable, polymorphic: true
end
因此,当我尝试像下面这样传递哈希时,它根本不会说任何嵌套模型被更改的父模型(changed_for_autosave?
为假,因为nested_records_changed_for_autosave?
为假)
{steps_attributes: [{id: "1", messages_attributes: [{body: "Some message"}]}]}
但是当Step模型的某些字段发生变化时,它可以正常工作(换句话说,一个级别的嵌套工作正常)。
我现在所做的是:@item.steps.each(&:updated_at_will_change!)
在控制器中,这显然是一个肮脏的黑客。这是Rails的预期行为或错误吗?