ruby on rails在多列中指定db中的唯一性

时间:2011-06-01 05:10:17

标签: ruby-on-rails activerecord model

我的模型如下:

class EntityTag < ActiveRecord::Base
  attr_protected :user_id, :post_id, :entity_id

  belongs_to :user
  belongs_to :post
  belongs_to :entity

  validates :user_id, :presence => true
  validates :entity_id, :presence => true
  validates :post_id, :presence => true
end

我想防范多个具有相同user_id,entity_id和post_id组合的行(例如,行的唯一ID就是这三个值)。

我能与ActiveRecord沟通的最简单方法是什么?

2 个答案:

答案 0 :(得分:7)

正如@dhruvg所说:

validates_uniqueness_of :user_id, :scope => [:entity_id, :post_id]

请注意,模型级别的唯一性验证不保证数据库中的唯一性。要有这个,你应该在你的桌子上放一个唯一的索引。

将以下内容添加到迁移中。

add_index :entity_tags, [:user_id, :post_id, :entity_id], :unique => true

答案 1 :(得分:0)