2012-04-27 55 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 

現在,我想查詢用戶的電子郵件的所有帖子(搞得像 「%字符串%」)。我寧願不用地圖/選擇來編寫它,因爲我認爲它會產生非常低效的代碼。我想類似的東西:

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 2012-04-27 14:37:48

+0

帖子與配置文件關聯。電子郵件位於用戶表中。 – Geo 2012-04-27 14:40:16

回答

1

試試這個

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

電子郵件位於用戶表中。請參閱每個模型中的評論。 – Geo 2012-04-27 14:39:54

+0

現在它應該工作... :) – Suborx 2012-04-27 14:55:01

+0

它呢,謝謝! – Geo 2012-04-27 15:11:46

1

那麼你就要成功了,但由於電子郵件是在用戶表,你必須參加,太多:

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