我正在将Rails 3.2应用程序升级到Rails 4.2.0。在3.2应用程序中,我使用通用控制器方法将模型对象添加到关联,如下所示:
parentResource.association(associationKey).proxy.push resource
因此,如果我有一个模型Thing和Thing has_many:collection_things,那么parentResource将是Thing的实例,associationKey将是:collection_things。此方法调用将资源(此处为CollectionThing的实例)添加到Thing.collection_things关联中(我本可以使用" send",但这可能允许任何模型方法通过将其作为参数发送来调用)。我不确定这是最好的方法,但它允许我使用单一控制器方法处理许多不同类型的关联。
这在Rails 4中不再有效。看起来,在Rails 4中,我需要获得Thing的
ActiveRecord::Associations::CollectionProxy
并调用push,但调用
parentResource.association(associationKey)
在我的3.2应用程序中工作的返回
的实例ActiveRecord::Associations::HasManyAssociation
不再有代理方法,所以我得到NoMethodError。
有关如何在Rails 4中做到这一点的任何想法?我知道我可以使用像
这样的东西来获取CollectionProxyparentResource.send association_name
但有没有办法做到这一点,这与我在3.2版本的应用程序中所做的更为相似?
答案 0 :(得分:0)
好的,经过多次探索,我发现了Rails 4的做法:
t.association(:collection_things).insert_record resource
和删除的工作方式与3.2中的相同:
t.association(:collection_things).delete resource
我已经在pry中测试了它,它似乎按预期工作。