Драгоценный камень предков с ассоциацией has_many

У меня есть таблица Items и связанная с ней настройка таблицы ItemPrices с ассоциацией has_many. В таблице ItemPrices также есть поле tier_id.

Итак, структура в основном

Item                      ItemPrices
---------                 ------------
id                        id
ancestry                  item_id
title                     tier_id
                          price

Таблица Items настроена так же, как и has_ancestry, и работает нормально.

Как я могу получить иерархию элементов, где итераторы находятся на определенном уровне?


person robzolkos    schedule 02.07.2013    source источник
comment
вы просто пытаетесь найти список элементов в заданном диапазоне tier_id?   -  person Dan Bradbury    schedule 13.07.2013
comment
@DanBradbury Я пытаюсь найти список элементов для данного родителя, где у детей есть цена на определенном уровне. Например, у меня завтрак - ›Яйца -› Жареные яйца и завтрак - ›Яйца -› Вареные яйца. Жареные яйца имеют цену на уровне 1 и уровне 2. Вареные яйца имеют цену только на уровне 1. Поэтому, если я смотрю на список предметов, применимых к уровню 1, я должен увидеть Завтрак - ›Яйца -› Вареные и жареные яйца . Если я смотрю на список элементов, относящихся к уровню 2, я должен видеть только Завтрак - ›Яйца -› Жареные яйца. Это попытка отфильтровать список по tier_id ассоциации.   -  person robzolkos    schedule 16.07.2013


Ответы (1)


это должно быть как-то так:

Модель товара:

 has_ancestry
 has_many :item_prices

 def self.tree_with_certain_tier(tier_id)
    scoped.includes(:item_prices).collect{|item| item.item_prices.with_certain_tier(tier_id)}.arrange
 end

Модель цены товара:

 belongs_to :item
 scope :with_certain_tier, lambda {|tier_id| where(:tier_id=>tier_id) }

и теперь вы можете взять то, что вам нужно, просто с

Item.tree_with_certain_tier(pass_certain_tier_id_here)

Я не проверял это, но это должно быть правильно (или, по крайней мере, указывать вам в правильном направлении)

спросите, если что-то непонятно, или вы получите ошибки. конечно, мы исправим их быстро

person okliv    schedule 14.07.2013
comment
получение ошибки в строке с областью: item_prices_with_ sure_tier, lambda {| tier_id | item_prices.with_ sure_tier (tier_id)} ошибка - неопределенная локальная переменная или метод `item_prices 'для #‹ Class: 0x007f8d5c1e3750 › - person robzolkos; 16.07.2013
comment
oopss ... объем в модели элемента был ненужным ... изменил свой ответ - person okliv; 16.07.2013