Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 通过这种关系,防止建立反向友谊有很多好处_Ruby On Rails_Facebook_Rails Activerecord_Ruby On Rails 5 - Fatal编程技术网

Ruby on rails 通过这种关系,防止建立反向友谊有很多好处

Ruby on rails 通过这种关系,防止建立反向友谊有很多好处,ruby-on-rails,facebook,rails-activerecord,ruby-on-rails-5,Ruby On Rails,Facebook,Rails Activerecord,Ruby On Rails 5,我正在为一个项目创建一个facebook克隆,但我很难阻止为技术上已经存在的关系创建友谊 例如,人员A向人员B发送朋友请求,由人员B接受。这创建了一个记录,其中人员a=“用户id”和人员B=“朋友id”。阻止人员A在数据库级别通过以下行向人员B发送另一个好友请求: t.index ["user_id", "friend_id"], name: "index_friendships_on_user_id_and_friend_id", unique: true, using: :btree 但是

我正在为一个项目创建一个facebook克隆,但我很难阻止为技术上已经存在的关系创建友谊

例如,人员A向人员B发送朋友请求,由人员B接受。这创建了一个记录,其中人员a=“用户id”和人员B=“朋友id”。阻止人员A在数据库级别通过以下行向人员B发送另一个好友请求:

t.index ["user_id", "friend_id"], name: "index_friendships_on_user_id_and_friend_id", unique: true, using: :btree
但是,人员B仍然可以向人员a发送请求,没有问题。我试图通过与上面相反的方式来防止这种情况:

t.index ["friend_id", "user_id"], name: "index_friendships_on_friend_id_and_user_id", unique: true, using: :btree
我现在意识到,这仍然允许建立一种反向友谊,但不再有重复的反向关系


因此,我想我需要编写一个自定义回调(请原谅我使用了不正确的术语),在保存记录之前检查数据库中是否存在重复的友谊,对吗?

自定义回调可能会面临竞争条件。如果两个用户之间存在友谊,我建议只对UI隐藏invite功能。我可以这样做,但这已经足够好了?如果它是更重要和更具破坏性的东西,如果用户真的想要,他们可以通过控制台或其他什么东西手动创建重复记录呢?如果你担心欺诈,你可以在你的控制器上添加一个
,在你的操作之前返回一个错误或无声地失败。