Ruby on rails 升级到Rails 4.1后,新的多态关联在与其父关联一起保存时无效
在从Rails 3.2升级到4.1之后,以下用于工作的代码现在失败了: 在控制器/规范中:Ruby on rails 升级到Rails 4.1后,新的多态关联在与其父关联一起保存时无效,ruby-on-rails,ruby-on-rails-4,has-many-through,polymorphic-associations,Ruby On Rails,Ruby On Rails 4,Has Many Through,Polymorphic Associations,在从Rails 3.2升级到4.1之后,以下用于工作的代码现在失败了: 在控制器/规范中: post = user.posts.build post.contacts << contact # contact is a persisted record post.save! # now fails 我认为关联没有更新,因为在联系人和联系人发布之间没有设置反向 如果您要修改关联(而不仅仅是从 然后,最好在 联接模型上的源关联。这允许关联的记录 将自动创建适当的联接模型 保存时记录
post = user.posts.build
post.contacts << contact # contact is a persisted record
post.save! # now fails
我认为关联没有更新,因为在联系人和联系人发布之间没有设置<代码>反向 如果您要修改关联(而不仅仅是从 然后,最好在 联接模型上的源关联。这允许关联的记录 将自动创建适当的联接模型 保存时记录
在Rails 3.2中,在执行验证嵌套关联之前保存了所有者模型,在4.1中,在保存模型之前保存了验证,并且由于未保存post,验证失败
class ContactPublishment
validates_presence_of :publishable
不允许通过验证(post未保存在db中)
为了解决这个问题,您可以在Post模型中禁用验证(ContactPublishing上的验证已从ContactModel调用)
class Post
或者像这样替换状态验证:
class ContactPublishment < ActiveRecord::Base
validates_associated :publishable
change_column :contact_publishments, :publishable_type, :string, null: false
change_column :contact_publishments, :publishable_id, :integer, null: false
class ContactPublishing
或者通过proxy_association执行此操作您将在
保存时收到错误代码>或在上查看您的验证OK会很有帮助。我将在中编辑它们。但关键是,这段代码在Rails3.2上运行得非常好,而更新把它搞砸了。此外,对于相似的、非多态的关系,我不明白这些问题。我试过了,结果不起作用。无论如何,问题不在于联系人
,而在于联系人的发布
和帖子
。此外,
的逆\u不适用于多态关联,因此它在帖子
的情况下不起作用,谢谢!成功了!除了change\u表
命令之外,我必须将其更改为change\u列
。非常感谢,我被困在这个问题上好几天了。当然,这是正确的改变专栏,当他写的时候,想到了改变表格。非常感谢。哇,对他们来说,在Rails中进行更改真是一件奇怪的事情…:P
class Post < ActiveRecord::Base
has_many :contact_publishments, as: :publishable, validate: false
class ContactPublishment < ActiveRecord::Base
validates_associated :publishable
change_column :contact_publishments, :publishable_type, :string, null: false
change_column :contact_publishments, :publishable_id, :integer, null: false