1

我在使用 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

我会以正确的方式解决这个问题吗?

4

2 回答 2

1
def index
    @subjects = Subject.where('name' => 'Physics')
    @subjects.each do |subject|
     @users = subject.users
    end
end

这给每个主题的用户。

于 2013-03-07T10:12:21.950 回答
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:根据哈里森詹姆斯在评论中告诉我的内容:

Subject.find(:all, :conditions => ["name LIKE ?", "%#{params[:name]}%"])
于 2013-03-07T10:47:40.223 回答