确保belongs_to组合是唯一的

时间:2014-07-22 16:18:56

标签: ruby-on-rails ruby

我不知道什么是正确的方式来确保只有一个记录具有相同的外键。让我们假设一个名为LineItem的类,它属于cartitem。类似的东西:

class LineItem < ActiveRecord::Base
  belongs_to :cart
  belongs_to :item 

关键是:我想要将这两个&#34;属性&#34;的组合变得独一无二。目前,我的方法是使用after_save回调,但我意识到这很糟糕。你是如何解决这个问题的?我正在考虑一个PORO课程(类似于LineItemSaver),但我并不完全相信。

谢谢!

3 个答案:

答案 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