我刚刚发现rails 2.3.5和rails 2.3.8之间的行为发生了变化,我找不到任何使用Google的东西。对rails 2.3.5和rails之间的accepters_nested_attributes_for的兼容性2.3.8
我不得不车型
class Book < ActiveRecord::Base
has_many :authors
accepts_nested_attributes_for authors
end
class Author < ActiveRecord::Base
belongs_to :book
end
我有一个观点来写一本书与嵌套视图作者。
成册控制器我有一个更新动作
def update
@book = Book.find(params[:id])
@book.attributes = params[:book]
....
end
params[:book]
看看喜欢这样的:
{:name=>"a great book", "authors_attributes"=>{"1"=>{:id"=>"2", "_destroy"=>"", :name => "Boney M"}}}
后者我proccess,我要访问我的更新集合(保存书对象之前,例如验证),使用rails 2.3.5 @ book.authors为我提供了作者集合,其值更新为params [:book] hash。但是在2.3.8中,它给了我从数据库重新加载的作者集合。
我的问题来自函数assign_nested_attributes_for_collection_association(/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/nested_attributes.rb)。它用@loaded = false返回一个AssociationProxy对象。因此,我第一次使用@ book.authors访问我的集合时,它会从db重新加载它。对于rails 2.3.5,情况并非如此。
我在这里遗漏了什么,或者这个新行为已经报道过某处?
在此先感谢您的帮助。