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医生说了些关于这件事的话那就太好了,对吧?谢谢!我刚刚遇到了同样的问题。