RoR 3 - 查找一组孩子的父母名单

Nic*_*Nic 4 join ruby-on-rails where belongs-to ruby-on-rails-3

我有两个典型关系模型:

menu_options模型:

class MenuOption < ActiveRecord::Base
  belongs_to :category
end
Run Code Online (Sandbox Code Playgroud)

类别模型:

class Category < ActiveRecord::Base
  has_many :menu_options
end
Run Code Online (Sandbox Code Playgroud)

我在部分显示类别,然后在另一部分显示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
Run Code Online (Sandbox Code Playgroud)

我一直在使用类似的方法这样做很长一段时间,我想知道是否有更多的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)
Run Code Online (Sandbox Code Playgroud)

Dog*_*ert 5

您只需选择具有menu_option的类别:user_level = user_level using

@categories = Categories.joins(:menu_options).where(:menu_options => { :user_level => user_level })
Run Code Online (Sandbox Code Playgroud)