开发者

Filter based on model attribute has_many relationship through, rails 3?

开发者 https://www.devze.com 2023-02-14 10:46 出处:网络
I have a simple question, but can\'t seem to find any solution, though I have found things that are similar, but just not exactly what I am looking for.

I have a simple question, but can't seem to find any solution, though I have found things that are similar, but just not exactly what I am looking for.

I have an application where a User has many Assets through the class UserAsset. I want to be able to do current_user.user_assets , but I only want to return records that have an Asset with a specified field value of "active".

This post is similar but I need to use the main m开发者_高级运维odel not the join model as a filter.

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

I tried setting the default scope on Asset, and also some conditions on the has many (user_assets) relationship, but rails is failing to consider the join on the Assets table. ie Unknown column 'asset.live' in 'where clause'. Trying to achieve the following:

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

So how do I use conditions or scopes to achieve this? I need the user_asset object because it contains info about the relationship that is relevant.

Thanks in advance!


You want current_user.assets, then your scopes should work.

Oh, but you want the user_assets. Hmm. I think you need the :include clause to find() but where to put it, I can't be arsed to think of right now.

Perhaps

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

(I'm not on Rails 3 yet, so that's going to be mangled)

Are you using :through when you really want a HABTM?

0

精彩评论

暂无评论...
验证码 换一张
取 消