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