У меня есть две модели с типичными отношениями:
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)