ActiveRecord通过has_one关联子属性查找

时间:2010-07-19 22:27:34

标签: ruby-on-rails activerecord associations

我有这样的模特:

class Discussion < ActiveRecord::Base
  has_many :comments 
  has_one :special_comment, :class_name => "Comment"
end

class Comment < ActiveRecord::Base
  belongs_to :discussion
  # contains author
end

如何通过其相邻的Discussion'作者'关联选择每个:special_comment。实际上,我想做一些事情:

select * from discussions 
inner join comments on comments.discussion_id=discussion.id 
where comments.author = 'poopface'

我接近这个:

  
    

Discussion.find(:all,:conditions =&gt; {:author =&gt;'poopface'},:joins =&gt;:special_comment)     ActiveRecord :: StatementInvalid:SQLite3 :: SQLException:no such column:discussion.author:SELECT“discussion”。* FROM“discussion”INNER JOIN“comments”ON comments.discussion_id = discussion.id WHERE(“discussion”。“author” ='poopface')

  

但它应该是WHERE ("comments"."author" = 'poopface')

谢谢!

2 个答案:

答案 0 :(得分:2)

试试这个:

Discussion.all(:conditions => {:comments=> {:author => "blah"}}, 
          :joins => :comments)

OR

Discussion.all(:conditions => ["comments.author = ?", "blah"], 
          :joins => :comments)

注意:您可以在示例代码中使用更好的作者姓名。

答案 1 :(得分:0)

假设您的“注释”表中有一些外键,您的has_one正在引用...

Discussion.find(:all, :conditions => {:comments=>{:author => 'blah'}}, 
                    :joins => :special_comment) 

将为您提供所有讨论,其中special_comment由'blah'创作。

Discussion.find(:all, :conditions => {:comments=>{:author => 'blah'}}, 
                    :joins => :comments) 

会给你所有的讨论,他们有任何评论由'blah'撰写。