2012-04-27 5 views
0

は、これらのモデルを想像してみて:これら3つの関連モデルをどのようにクエリできますか?

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 "%のサブストリング%" を行う)照会したいと思います。私はそれが非常に非効率的なコードを生成すると思うので、map/selectで書く必要はありません。

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

事は、私は上記の条件でprofile.user.emailを持っている必要があり何とか知っているが、私はちょうどそれが仕事を得ることができないです:私はそのような何かを試してみました。助言がありますか?

+0

あなたの記事は、モデルのプロファイルまたはユーザーにasociatedていますか?また、ユーザーテーブルまたはプロファイルテーブルにメールがありますか? – Suborx

+0

投稿はプロフィールに関連付けられています。電子メールはユーザーテーブルにあります。 – Geo

答えて

1

さてあなたはほとんどありますが、電子メールは、ユーザーテーブルにあるので、あなたがあまりにもすることを参加させる必要があり、この

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

電子メールがユーザーテーブルにあります。それぞれのモデルのコメントを参照してください。 – Geo

+0

これでうまくいくはずです... :) – Suborx

+0

ありがとうございます! – Geo

1

をお試しください:

self.joins(:profile => :user).where("users.email LIKE ?","%#{email}%") 
関連する問題