Ruby on rails 不对称双柱上的唯一性
这是我的表Ruby on rails 不对称双柱上的唯一性,ruby-on-rails,postgresql,constraints,unique-constraint,Ruby On Rails,Postgresql,Constraints,Unique Constraint,这是我的表友谊(user\u id1:integer,user\u id2:integer) 我想向数据库添加一个约束,这样,如果其符号已经存在,就会拒绝几个用户id 例如,如果我在数据库中已经有了这对(42,17),我不想保存(17,42) 我正在将rails与postgresql一起使用。您可以在数据库中使用表达式索引执行此操作: create unique index unq_friendship_1_2 on (least(user_id1, user_id2), greate
友谊(user\u id1:integer,user\u id2:integer)
我想向数据库添加一个约束,这样,如果其符号已经存在,就会拒绝几个用户id
例如,如果我在数据库中已经有了这对(42,17)
,我不想保存(17,42)
我正在将rails与postgresql一起使用。您可以在数据库中使用表达式索引执行此操作:
create unique index unq_friendship_1_2
on (least(user_id1, user_id2), greatest(user_id1, user_id2));
我不知道如何在rails中表达这一点。您可以在数据库中使用表达式索引来实现这一点:
create unique index unq_friendship_1_2
on (least(user_id1, user_id2), greatest(user_id1, user_id2));
我不知道如何在rails中表达这一点。如果您能够以某种方式实现应用程序,则可以使用普通唯一约束和检查约束的组合来实现这一点,即它将较小的值存储在字段user_id_1中,将较大的值存储在字段user_id_2中
在(用户\u id\u 1、用户\u id\u 2)上定义一个唯一约束,并另外定义一个检查约束(user_id_1如果能够以某种方式实现应用程序,则可以使用普通唯一约束和检查约束的组合来实现,即它将较小的值存储在字段user_id_1中,将较大的值存储在字段user_id_2中
在(user_id_1,user_id_2)上定义一个唯一的约束,并另外定义一个检查约束(user_id_1您可以在Rails中这样做)。 在rails模型
Friendly.rb
中,添加以下验证\u唯一性
调用:
验证:user\u id1,:scope=>:user\u id2的唯一性。
这保证不会有两对相同的user\u id1
s或user\u id2
s
但是,他解释说,这种方法并不完全安全,因为如果同时发送两个请求,它们可能会被接受,并且您的行将被复制。他的解决方案是将以下迁移添加到您的友谊模型中:
class AddUniqueConstraints
您可以在Rails中这样做。
在rails模型Friendly.rb
中,添加以下验证\u唯一性
调用:
验证:user\u id1,:scope=>:user\u id2的唯一性。
这保证不会有两对相同的user\u id1
s或user\u id2
s
但是,他解释说,这种方法并不完全安全,因为如果同时发送两个请求,它们可能会被接受,并且您的行将被复制。他的解决方案是将以下迁移添加到您的友谊模型中:
class AddUniqueConstraints