Rails4验证多列的唯一性

时间:2014-07-04 07:01:50

标签: ruby-on-rails

我有一个友谊模型,其中:friend_id也是外键,如:user_id

友谊     id | user_id | friend_id 我知道验证这两个字段的唯一性就是这样的

validates :user_id, :uniqueness => {:scope => :friend_id}

但有没有办法验证

user_id = 1, friend_id = 3
user_id = 3, friend_id = 1 

这样只存储user_id = 1,friend_id = 3?

1 个答案:

答案 0 :(得分:1)

加入模型

您似乎正在使用带有Rails的join model - 如评论中所述,您希望将其更改为friendship(而不是friend)。

Rails有两种类型的join机制 - has_many :throughhas_and_belongs_to_many - 两者都允许您关联many-to-many个记录,如下所示:

#app/models/user.rb
Class User < ActiveRecord::Base
   has_many :friendships
   has_many :friends, through: :friendships
end

#app/models/friendship.rb
Class Friendship < ActiveRecord::Base
   belongs_to :friend, class: "User", foreign_key: "friend_id"
   belongs_to :user
end

#friendships
id | user_id | friend_id | created_at | updated_at

我建议您使用friendship模型(而不是模型HABTM设置),因为HMT允许您添加额外数据,例如{{1} },created_atupdated_at等)


自我参照

我还会使用permissions模型。这样您就可以保留单个模型(self-referential),然后在没有问题的情况下调用User

我的上述关联定义是否正确是另一回事;这就是你想要设置它们的方式。

-

<强>验证

在验证您的关联方面,我相信您可以使用indexes in your DB。这通常用于@user.friends表 -

HABTM

这适用于您的原始案例,但不适用于第二个