确保belongs_to组合是唯一的

teh*_*wer 1 ruby ruby-on-rails

我不知道确保只有一条记录具有相同的外键的正确方法是什么。我们假设有一个名为 LineItem 的类,它属于 ancart和 to item。就像是:

class LineItem < ActiveRecord::Base
  belongs_to :cart
  belongs_to :item 
Run Code Online (Sandbox Code Playgroud)

重点是:我想让这两个“属性”的组合变得独特。此时,我的方法是使用after_save回调,但我意识到这很糟糕。你如何解决这个问题?我在 PORO 类(类似于 LineItemSaver)中思考,但我并不完全相信。

谢谢!

Pav*_*van 5

如果我正确理解你的问题,你想要scope的选项validates_uniqueness_of。如果是这样,这应该可行。

在你的LineItem模型中:

class LineItem < ActiveRecord::Base

  belongs_to :cart
  belongs_to :item 
  validates_uniqueness_of :cart_id, scope: :item_id

end
Run Code Online (Sandbox Code Playgroud)

而且,您应该生成迁移来添加以下内容:

add_index :line_items, [ :cart_id, :item_id ], :unique => true
Run Code Online (Sandbox Code Playgroud)

更多信息请点击此处