我在使用has_and_belongs_to_many关系时遇到问题。我有以下内容:
class User
include Mongoid::Document
has_and_belongs_to_many :subjects
end
class Subject
include Mongoid::Document
field :name, :type => String
attr_accessible :name
has_and_belongs_to_many :users
end
然后在我的控制器中,我试图找到所有具有特定主题的用户:
class UsersController < ApplicationController
def index
@users = User.where('subjects.name' => 'Physics')
end
end
我能以正确的方式解决这个问题吗?
答案 0 :(得分:1)
def index
@subjects = Subject.where('name' => 'Physics')
@subjects.each do |subject|
@users = subject.users
end
end
这为每个主题的用户提供。
答案 1 :(得分:1)
可能只有一个subject
名为Physics
。
我认为代码应该是这样的:
@subject = Subject.find_by_name('Physics')
@users = @subject.users
这应该是嵌套路由,可能不在UsersController的索引页面中。 http://guides.rubyonrails.org/routing.html#nested-resources
编辑: 或者实际上,如果不是嵌套路由,您应该将该代码放在SubjectsController中,如下所示:
def index
@subject = Subject.find(params[:id])
@users = @subject.users
end
或者如果您将名称作为参数传递:
def index
@subject = Subject.find_by_name(params[:name])
@users = @subject.users
end
EDIT2: 根据Harrison James在评论中告诉我的内容:
Subject.find(:all, :conditions => ["name LIKE ?", "%#{params[:name]}%"])