想象一下这些模型:
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,但我无法让它工作。有什么建议吗?
答案 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}%")