Ruby on rails 正在获取多态关联以通过验证

Ruby on rails 正在获取多态关联以通过验证,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有用户,个人资料,买方,和卖方对象 class User has_many :profiles end class Profile belongs_to :user belongs_to :profileable, polymorphic: true validates :user, presence: true, uniqueness: { scope: :profileable_type } end class Buyer has_one :profile, as:

我有
用户
个人资料
买方
,和
卖方
对象

class User
  has_many :profiles
end

class Profile
  belongs_to :user
  belongs_to :profileable, polymorphic: true
  validates :user, presence: true, uniqueness: { scope: :profileable_type }
end

class Buyer
  has_one :profile, as: :profileable, dependent: :destroy
  has_one :user, through: :profile # is this needed?
end

class Seller
  has_one :profile, as: :profileable, dependent: :destroy
  has_one :user, through: :profile # is this needed?
end
如果没有有效的配置文件,我希望能够停止创建
买方
卖方

在rails控制台中,我目前可以通过创建一个
配置文件
来创建一个
买家
,而不需要
用户:
值。以下内容将创建一个不存在
配置文件的
买家

>Buyer.create(profile:profile.create)

=>#

我想了解如何防止这种情况。保存前我是否需要一个
或此类回调?

根据文章中提到的描述,您希望在多态性中添加验证,因此只需在模型中添加状态验证,它就会相应地工作:

class Buyer
  has_one :profile, as: :profileable, dependent: :destroy
  has_one :user, through: :profile # is this needed?

  validates :profileable, presence: true
  validates :user, presence: true
end

如果找不到用户,第二次验证将回滚事务。

谢谢。为了实现这一点,我是否需要将
profileable_id
添加到Buyer表迁移中?我希望您已经根据问题中发布的关联完成了这一操作。
class Buyer
  has_one :profile, as: :profileable, dependent: :destroy
  has_one :user, through: :profile # is this needed?

  validates :profileable, presence: true
  validates :user, presence: true
end