2013-05-15 2 views
1

У меня есть grouped_collection_select с некоторыми продуктами (связанные с категорией):grouped_collection_select с частности объектов

<%= c.grouped_collection_select :product_id, @categories, :products, :name, :id, :name, :include_blank => true %> 

Но я просто хочу некоторые продукты, которые имеют логическое значение «истина», можно указать это?

Благодаря

ответ

1

Вы в основном вызове метода для экземпляра каждого родительского объекта в сгруппированных выберите. Поэтому, если у вас есть метод экземпляра для родительского объекта (категории), который соответствует требуемым продуктам, вы можете вызвать его в помощнике. Что-то вроде этого:

Class Category 
    has_and_belongs_to_many :products 

    def target_products 
    #return a collection here that corresponds to what you're looking for based on 
    #your criteria in the associated product(s) object. For example: 
    self.products.active #where active is a named scope in Product for what you're looking for. 
    #You could also add an AR macro method with a condition etc. Basically any thing that 
    #will respond to category.target_products in the end. 
    end 

end 

Затем используйте этот метод в groupand_collection_select.

<%= c.grouped_collection_select :product_id, @categories, :target_products, :name, :id, :name, :include_blank => true %> 
+0

Спасибо, много, я пытался это с тех пор. – eluus

+0

Нет проблем. Извините за начальную путаницу в первоначальном ответе. – miked

+0

Что делать, если мы хотим передать некоторые параметры методу target_products. Мой вопрос: http://stackoverflow.com/questions/33581359/grouped-collection-select-custom-method, не могли бы вы помочь. – codemilan

0

Чтобы сделать это, вы хотите построить свою коллекцию на основе этого критерия. Значение, @categories будет содержать только те категории с продуктами, которые соответствуют вашим условиям.

(я сделать некоторые предположения о вашей схеме, но что-то вроде этого должно работать :)

@categories = Category.where("products.some_attribute = ?", true).joins(:products) 
+0

Это было уже то, что я сделал, но проблема в том, что все продукты здесь для этой категории, даже те, которые являются «ложными» ... – eluus

+0

Hm. Похоже, вы делаете что-то неправильно. Полученный запрос, построенный из этого кода, будет возвращать только те продукты с «some_attribute» как true (или 1). Можете ли вы разместить свой код, который устанавливает @category? – miked

+0

Код, который вы написали, «дайте мне только категории с некоторыми продуктами с атрибутом, равным true, но grouped_collection_select возьмет все продукты из этих категорий! Итак, да, у меня есть только категории с хотя бы одним продуктом« true », false ", потому что он никогда не уточняется в grouped_collection_select. – eluus

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