【发布时间】:2014-07-14 08:33:25
【问题描述】:
从 Rails 3.2 升级到 4.1 后,以下以前可以工作的代码现在失败了:
在控制器/规范中:
post = user.posts.build
post.contacts << contact # contact is a persisted record
post.save! # now fails
我基本上是在尝试保存帖子及其关联的联系人,这应该会即时创建 contact_publishment 记录。
错误出现在新的contact_publishment 记录中:“Publishable can't be blank”
型号:
class Contact
...
has_many :contact_publishments
...
end
class ContactPublishment
...
belongs_to :publishable, polymorphic: true
belongs_to :contact
validates_uniqueness_of :publishable_id, :scope => [:contact_id, :publishable_type]
validates_presence_of :contact, :publishable
...
end
class Post
...
has_many :contact_publishments, as: :publishable
has_many :contacts, through: :contact_publishments
...
end
【问题讨论】:
-
您在
save!或<<行收到错误? -
有助于查看您的验证
-
好的。我会编辑它们。但关键是这段代码在 Rails 3.2 上完美唤醒,更新搞砸了。此外,对于类似的非多态关系,我不会遇到这些问题。
标签: ruby-on-rails ruby-on-rails-4 has-many-through polymorphic-associations