Ruby on rails 有多条:在一个查询中用户是收件人或作者的消息

Ruby on rails 有多条:在一个查询中用户是收件人或作者的消息,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我的邮件模型属于作者和收件人 belongs_to :recipient, :class_name => "User", :foreign_key => "recipient_id" belongs_to :author, :class_name => "User", :foreign_key => "author_id" 现在我想做的是在用户模型中设置一个has_-many关系,即在单个查询中获取用户是作者或收件人的所有消息。我怎么做那样的事 has_many :me

我的邮件模型属于作者和收件人

belongs_to :recipient, :class_name => "User", :foreign_key => "recipient_id"
belongs_to :author, :class_name => "User", :foreign_key => "author_id"
现在我想做的是在用户模型中设置一个has_-many关系,即在单个查询中获取用户是作者或收件人的所有消息。我怎么做那样的事

has_many :messages, :finder_sql => ['author_id = #{self.id} or recipient_id = #{self.id}']
然而,这打破了

  User.first.messages
    User Load (0.6ms)  SELECT "users".* FROM "users" LIMIT 1
    Message Load (0.5ms)  author_id = #{self.id} or recipient_id = #{self.id}
  PGError: ERROR:  syntax error at or near "author_id"
  LINE 1: author_id = #{self.id} or recipient_id = #{self.id}
      ^
:author_id = #{self.id} or recipient_id = #{self.id} ActiveRecord::StatementInvalid:  PGError: ERROR:  syntax error at or near "author_id" LINE 1: author_id = #{self.id} or recipient_id = #{self.id}
更新: 从Rails 3.1中删除了插值变量。现在您必须使用proc

  has_many :messages, :finder_sql => proc { "SELECT * FROM messages WHERE author_id = #{self.id} or recipient_id = #{self.id}" }

不能在单引号中插入变量

'author_id = #{self.id} or recipient_id = #{self.id}'
应该是

"author_id = #{self.id} or recipient_id = #{self.id}"

请参阅我的问题以获取解决方案。你必须在Rails 3.1Phew中使用proc!如果Rails医生说了些关于这件事的话那就太好了,对吧?谢谢!我刚刚遇到了同样的问题。