我有一个简单的问题,但似乎找不到任何解决方案,虽然我发现了类似的东西,但并不完全是我想要的东西。
我有一个应用程序,其中User通过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
我尝试在Asset上设置默认范围,并且还有一些条件有很多(user_assets)关系,但rails没有考虑Assets表上的连接。即'where子句'中的未知列'asset.live'。试图实现以下目标:
@active_user_assets = current_user.user_assets #only where assets.active = true
那么我如何使用条件或范围来实现这一目标呢?我需要user_asset对象,因为它包含有关关系的信息。
提前致谢!
答案 0 :(得分:0)
您想要current_user.assets
,那么您的范围应该有效。
哦,但你想要user_assets。嗯。我认为你需要:include
条款到find()
但是在哪里放,我现在不能想到。
也许
current_user.user_assets.find(:all, :include => :assets).where('asset.live=?', true)
(我还没有使用Rails 3,所以这会被破坏)
您真的想要HABTM时使用的是:through
吗?