过滤器基于模型属性has_many关系,rails 3?

时间:2011-03-02 03:54:45

标签: ruby-on-rails-3 scope has-many-through

我有一个简单的问题,但似乎找不到任何解决方案,虽然我发现了类似的东西,但并不完全是我想要的东西。

我有一个应用程序,其中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对象,因为它包含有关关系的信息。

提前致谢!

1 个答案:

答案 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吗?