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)
您只需选择具有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)