У меня есть две модели с типичными отношениями:
модель 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)
.uniq
для этого. Не могли бы вы проверить это один раз? - person Dogbert   schedule 29.06.2011@categories = categories.uniq
. - person Nic   schedule 29.06.2011