我有两个典型关系的模型:
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
我一直在使用类似的方法这样做很长一段时间,我想知道是否有更多的rails方法来做到这一点?
**解决: 我忽略了提到'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)
答案 0 :(得分:5)
您只需选择具有menu_option的类别:user_level = user_level using
@categories = Categories.joins(:menu_options).where(:menu_options => { :user_level => user_level })
答案 1 :(得分:4)
你可以做一个连接,所以像:
@categories = Categories.joins(:menu_options).where(:menu_options => {:user_level => user_level})