0

想象一下这些模型:

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/selects 编写它,因为我认为它会生成非常低效的代码。我尝试过这样的事情:

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

问题是,我知道我应该以某种方式在上述条件下拥有一个 profile.user.email,但我就是无法让它工作。有什么建议么?

4

2 回答 2

1

试试这个

class Post
  belongs_to :profile
  scope :with_user_email_like, lambda{|email| joins(:profile => :user).where("users.email LIKE %?%", email)} 
end
于 2012-04-27T14:39:02.760 回答
1

好吧,你快到了,但由于电子邮件在用户表中,你也必须加入:

self.joins(:profile => :user).where("users.email LIKE ?","%#{email}%")
于 2012-04-27T14:41:33.417 回答