我可以使用'或'模型关系中的陈述?

时间:2014-09-17 12:30:11

标签: ruby-on-rails ruby-on-rails-4

我正在制作一个facebook克隆。我有一个User模型和一个Request模型,包括(sender,recipient,accepted:boolean)。

如果收件人接受它,则变为“真实”'他们也是朋友。我如何建立以下关系?

has_many :friends, -> { where(accepted: true)}, :foreign_key => :recipient_id or :sender_id

因为如果请求被接受,则无论用户是发件人还是收件人都无关紧要。

1 个答案:

答案 0 :(得分:2)

简短回答:不!永远不要试图以这种方式使用or(我的意思是代码中的任何地方)!他们是控制流操作员。详情由Avdi in his blog详细解释!

答案很长:你可以在self-referential association上关注Ryan bates的这个精彩的轨道广播。

为了维护好友请求。您可以拥有一个模型:FriendRequest,其列为:state(如果您想维护请求状态:忽略,阻止,接受,以后等),sender_id和{{1} }。

应用程序/模型/ user.rb

receiver_id

应用程序/模型/ friend_request.rb

has_many friend_requests, foreign_key: :receiver_id # user will be the receiving requests!
has_many sent_requests, foreign_key: :sender_id # user will be the sender, right?

因此,当用户接受请求时,您将其关系添加到belongs_to :receiver, class_name: 'User' belongs_to :sender, class_name: 'User' 模型。这将更有意义。