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

时间:2011-06-28 17:53:37

标签: ruby-on-rails ruby-on-rails-3 join where belongs-to

我有两个典型关系的模型:

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)

2 个答案:

答案 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})