我如何查询这3个相关模型?

时间:2012-04-27 14:34:08

标签: ruby-on-rails ruby postgresql activerecord

想象一下这些模型:

class User
  belongs_to :profile
  # has email here
end

class Profile
  has_one :user
  # has first_name,last_name
end

class Post
  belongs_to :profile
  # has title,content
end

现在,我想在用户的电子邮件中查询所有帖子(做一个LIKE“%substring%”)。我宁愿不用map / choose来编写它,因为我认为它会产生非常低效的代码。我尝试过类似的东西:

class Post
  def self.with_user_email_like(email)
    self.joins(:profile).where("profile.email LIKE ?","%#{email}%")
  end
end

问题是,我知道在上面的条件中我应该有一个profile.user.email,但我无法让它工作。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

试试这个

class Post
  belongs_to :profile
  scope :with_user_email_like, lambda{|email| joins(:profile => :user).where("users.email LIKE %?%", email)} 
end

答案 1 :(得分:1)

嗯,你几乎就在那里,但由于电子邮件在用户表中,你也必须加入:

self.joins(:profile => :user).where("users.email LIKE ?","%#{email}%")