如何在轨道上的ruby中的模型中指定2个外键?

时间:2013-02-03 22:45:57

标签: ruby-on-rails ruby-on-rails-3 rubygems ruby-on-rails-3.2

我希望能够轻松访问current_users对话。 E.G。

current_user.conversations

事情是当前用户可以是发件人或收件人(sender_id或recipient_id)

class User < ActiveRecord::Base

  has_many :conversations, :foreign_key => "sender_id"

这有效,但有时候发件人是收件人或说某人有10个邮件作为发件人并且收件人没有回复任何邮件,但数据库中仍存在对话。

如果我以该用户身份登录并键入current_user.conversations,则不会出现任何问题,因为用户模型中指定的外键是sender_id。有没有办法指定两者?就像在sql中使用“OR”一样?

亲切的问候

1 个答案:

答案 0 :(得分:1)

我不相信有一种方法可以完全你想要什么,但是你可能需要考虑一些替代方法:

1)将它拆分为两个关系,sent_conversations和received_conversations,然后你可以定义一个组合它们的方法。

2)添加一个执行某些自定义SQL的新类方法:

class User < ActiveRecord::Base
  def conversations
    Conversation.where("sender_id = :id OR receiver_id = :id", id: self.id)
  end
end