Фильтр на основе отношения атрибута has_many модели через рельсы 3? - PullRequest
1 голос
/ 02 марта 2011

У меня есть простой вопрос, но я не могу найти никакого решения, хотя я нашел вещи, которые похожи, но просто не совсем то, что я ищу.

У меня есть приложение, в котором у пользователя много активов через класс UserAsset. Я хочу иметь возможность делать current_user.user_assets, но я хочу только возвращать записи, которые имеют актив с указанным значением поля «активный».

Этот пост похож, но мне нужно использовать основную модель, а не модель соединения в качестве фильтра.

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. т.е. Неизвестный столбец «asset.live» в «где пункт». Пытаясь добиться следующего:

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

Так, как мне использовать условия или границы для достижения этой цели? Мне нужен объект user_asset, потому что он содержит информацию о релевантных отношениях.

Заранее спасибо!

1 Ответ

0 голосов
/ 02 марта 2011

Вы хотите current_user.assets, тогда ваши области должны работать.

О, но вы хотите user_assets. Хм. Я думаю, что вам нужно предложение :include для find(), но где его поместить, я не могу думать о нем прямо сейчас.

Возможно

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

(я еще не на Rails 3, так что это будет покалечено)

Используете ли вы :through, когда вам действительно нужен HABTM?

...