RoR 3 - Поиск списка родителей из группы детей - PullRequest
4 голосов
/ 28 июня 2011

У меня есть две модели с типичными отношениями:

menu_options модель:

class MenuOption < ActiveRecord::Base
  belongs_to :category
end

модель категорий:

class Category < ActiveRecord::Base
  has_many :menu_options
end

Я отображаю категории в частичнойи затем menu_options в другой части.В настоящее время я пропускаю пустые категории, перебирая menu_options и собирая все категории, которые появляются с этим кодом:

@menu_options = MenuOption.select_by_user_level(user_level)
categories = []
@menu_options.each do |m|
 categories << m.category
end
@categories = categories.uniq

Я уже довольно давно использую подобные способы, яинтересно, есть ли другой способ сделать это?

** РЕШЕНО: Я не упомянул, что метод select_by_user_level использует неравенства.Я взял код, который вы оба предоставили, и обновил его, чтобы избавиться от этого метода, и скомбинировал .uniq в строку выбора категорий.Вот результат.Спасибо за вашу помощь!

@categories = Category.joins(:menu_options).where('menu_options.minimum_user_level <= ?', @user.user_level ).uniq
@menu_options = MenuOption.where('minimum_user_level <= ?', @user.user_level)

Ответы [ 2 ]

5 голосов
/ 28 июня 2011

Вы можете просто выбрать Категории, у которых есть опция меню с помощью: user_level = user_level, используя

@categories = Categories.joins(:menu_options).where(:menu_options => { :user_level => user_level })
4 голосов
/ 28 июня 2011

Вместо этого вы можете сделать соединение, что-то вроде:

@categories = Categories.joins(:menu_options).where(:menu_options => {:user_level => user_level})
...