有条件地保存has_many_through关系



在Rails中,如何在has_many_through关系上有条件地关联记录?使用下面的Rails文档示例:

class Physician < ApplicationRecord
  has_many :appointments
  has_many :patients, through: :appointments
end
class Appointment < ApplicationRecord
  belongs_to :physician
  belongs_to :patient
end
class Patient < ApplicationRecord
  has_many :appointments
  has_many :physicians, through: :appointments
end

假设我想要预约两个医生。也就是说,如果指定的医生少于两名,就不会有任何预约记录。然而,该预约如何能够参考每一位医生呢?

基本上,我想跟踪用户喜欢其他用户和他们之间的相互喜欢。当两个用户都喜欢对方时,就建立了连接。但是我不希望只有一个用户喜欢另一个用户,但它不是互惠的连接。

当用户A点赞用户b时,创建"点赞"。当用户B点赞用户A时,创建一个"赞"。同时还创建了一个"连接"。

连接应该能够调用:connection.users

用户应该能够调用:user.likesuser.connections

我遇到的问题是关系表如何知道它是相互的?

对于最初的问题,connection不会在两个用户之间产生差异,因此我将其建模为one to many关系并验证它只有两个用户。

一个类有两个用户,liker(类的给予者)和likee(类的接受者)。每次创建新的like时,都应该检查likee是否也喜欢likerIf likee.likes.where(likee: liker)?如果是,则创建两个用户的新连接。

class User < ApplicationRecord
    has_many :likes
    has_many :connections
end
class Like < ApplicationRecord
    belongs_to :user, :foreign_key => 'liker_id'
    belongs_to :user, :foreign_key => 'likee_id'
end
class Connection < ApplicationRecord
    has_many :likes
    has_many :users, through: likes
end

我想补充一点,我不是100%确定这一点,因为我目前正在学习Rails自己。但这是我想到的,希望它有用(和正确)。

最新更新