Ruby on rails 升级到Rails 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 我认为关联没有更新,因为在联系人和联系人发布之间没有设置反向 如果您要修改关联(而不仅仅是从 然后,最好在 联接模型上的源关联。这允许关联的记录 将自动创建适当的联接模型 保存时记录

在从Rails 3.2升级到4.1之后,以下用于工作的代码现在失败了:

在控制器/规范中:

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