2011-03-02 76 views
1

我有一個簡單的問題,但似乎無法找到任何解決方案,雖然我發現的東西是相似的,但只是不完全是我在找什麼。基於模型屬性has_many關係過濾,rails 3?

我有一個應用程序,其中用戶有許多資產通過類UserAsset。我希望能夠執行current_user.user_assets,但我只想返回具有指定字段值爲「active」的Asset的記錄。

這個post是類似的,但我需要使用主模型而不是連接模型作爲過濾器。

class UserAsset < ActiveRecord::Base 
    belongs_to :asset 
    belongs_to :user 
end 

class Asset < ActiveRecord::Base 
    has_many :user_assets 
    has_many :users, :through => :user_assets 
end 

class User < ActiveRecord::Base 
    has_many :user_assets 
    has_many :assets, :through => :user_assets 
end 

我試着設置資產的默認範圍,也對有許多(user_assets)關係的一些條件,但Rails是未能考慮對資產表的連接。即'where子句'中的未知列'asset.live'。努力實現以下幾點:

@active_user_assets = current_user.user_assets #only where assets.active = true 

那麼,如何使用條件或範圍來實現這一目標?我需要user_asset對象,因爲它包含關於相關關係的信息。

在此先感謝!

回答

0

你想current_user.assets,那麼你的範圍應該工作。

哦,但你想要的user_assets。嗯。我認爲你需要:include條款find()但是在哪裏說,我不能現在就想到。

也許

current_user.user_assets.find(:all, :include => :assets).where('asset.live=?', true) 

(我不是on Rails的3呢,所以這將是錯位)

是否使用:through當你真的想要一個HABTM?

+1

我不能使用HABTM,因爲我需要額外的關係領域。您的提示確實幫助我找到了解決方案:我在User.rb的「has_many:user_assets」行中添加了「:include =>:asset,:conditions =>」assets.active ='1'「」,現在它完美工作,但我不積極,這是最佳/合適的解決方案性能明智。我會花幾分鐘時間看看別人是否有更好的主意。謝謝 – utahtwo 2011-03-02 04:25:12

相關問題