2014-01-12 7 views
1

Проблемавызов has_many без условия

class Product < ActiveRecord::Base 
    has_many: images , conditions: { size: 'small' } 
end 

Теперь я хочу, чтобы получить доступ к product.images без condition. Там в любом случае ? Я думаю, что это очень общая вещь, поэтому может быть что-то вроде unscoped типов методов.

Я знаю, что могу сделать что-то вроде ниже.

def all_images 
    Image.where(product_id: self.id) 
end 

Это не нормально, чтобы создать такой тип методов во всех моделях для всех таких методов класса, который содержит conditions области видимости. Обычно я вызываю методы без каких-либо условий, когда хочу отобразить их в панели администратора.

ответ

0

Вы можете использовать unscoped метод:

product.images.unscoped 

Заметим, однако, что это приведет к удалению всех областей от объединения прокси вместе с моделью по умолчанию объема.

1

Насколько я знаю, вы не можете легко это сделать. И по уважительной причине, если вам когда-либо понадобится «все» предметы в коллекции, зачем добавлять условия в первую очередь?

Если вы хотите загрузить только некоторые элементы коллекции, то их путь - определить дополнительную ассоциацию.

class Product < ActiveRecord::Base 
    # has_many :small_images, -> { where size: 'small' }, class: 'Image' # <= Rails 4 
    has_many :small_images , conditions: { size: 'small' }, class: 'Image' 
    has_many :images 
end 

Я думаю, что это также более ясно сейчас, вы звоните product.images для всех изображений и product.small_images для маленьких.

+1

Возможно, даже лучшая идея заключалась бы в создании области «малых» на изображениях. Тогда вы можете называть 'products.images.small' без изменения класса Product вообще. – BroiSatse

+0

@BroiSatse: Я согласен, но вопрос касался условий в ассоциациях. Это было просто для примера. – Ernest

Смежные вопросы