我不知道什么是正确的方式来确保只有一个记录具有相同的外键。让我们假设一个名为LineItem的类,它属于cart
和item
。类似的东西:
class LineItem < ActiveRecord::Base
belongs_to :cart
belongs_to :item
关键是:我想要将这两个&#34;属性&#34;的组合变得独一无二。目前,我的方法是使用after_save
回调,但我意识到这很糟糕。你是如何解决这个问题的?我正在考虑一个PORO课程(类似于LineItemSaver),但我并不完全相信。
谢谢!
答案 0 :(得分:2)
如果我正确理解了您的问题,您需要scope
的{{1}}选项。如果是这样,这应该有用。
在validates_uniqueness_of
模型中:
LineItem
此外,您应该生成迁移以添加此内容:
class LineItem < ActiveRecord::Base
belongs_to :cart
belongs_to :item
validates_uniqueness_of :cart_id, scope: :item_id
end
更多信息 here 。
答案 1 :(得分:2)
您是否只能进行唯一性验证?
validates :cart_id, uniqueness: {scope: :item_id}
答案 2 :(得分:2)
尝试使用validate方法确保item_id的唯一作用域为:cart_id
类似的东西:
validates :item_id, uniqueness: { scope: :cart_id }
或者,如果您想要解决问题,只需增加数量,您也可以:
validate :ensure_line_item_uniqueness
def ensure_line_item_uniqueness
... whatever fixes the situation here ...
end