我有一个友谊模型,其中: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?
答案 0 :(得分:1)
加入模型
您似乎正在使用带有Rails的join model
- 如评论中所述,您希望将其更改为friendship
(而不是friend
)。
Rails有两种类型的join
机制 - has_many :through
和has_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_at
,updated_at
等)
自我参照
我还会使用permissions
模型。这样您就可以保留单个模型(self-referential
),然后在没有问题的情况下调用User
。
我的上述关联定义是否正确是另一回事;这就是你想要设置它们的方式。
-
<强>验证强>
在验证您的关联方面,我相信您可以使用indexes in your DB。这通常用于@user.friends
表 -
HABTM
这适用于您的原始案例,但不适用于第二个