Rails模型和独特的组合

3 model ruby-on-rails

我有一个Rails应用程序,其中有一个名为friendrequests.它看起来像这样:

user1_id:integer user2_id:integer hasaccepted:boolean
Run Code Online (Sandbox Code Playgroud)

我正在创建添加朋友的选项,但是朋友请求只能发送一次.所以你不能在数据库的数据中有这样的东西:

user1_id | user2_id | hasaccepted
       1 |        2 |       false
       1 |        2 |       false
Run Code Online (Sandbox Code Playgroud)

要么

user1_id | user2_id | hasaccepted
       1 |        2 |       false
       2 |        1 |       false
Run Code Online (Sandbox Code Playgroud)

user1_id/user2_id组合必须是唯一的,而不是列本身,所以这是可能的:

user1_id | user2_id | hasaccepted
       1 |        2 |       false
       1 |        3 |       false
Run Code Online (Sandbox Code Playgroud)

是否可以在模型中定义它?我怎样才能做到这一点?

Chr*_*ris 6

对于第一种情况,在您的FriendRequest模型中,使用validates_uniqueness_of(:user1_id, :scope => :user2_id).您可能还需要反向.对于第二种情况下,我会覆盖#validateFriendRequest做在那里进行检查(见API文档的详细信息,该方法应该如何执行).