Mongoid关系查询语法

时间:2013-03-07 10:06:28

标签: ruby-on-rails mongodb mongoid

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

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

2 个答案:

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