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

subjectという名前はおそらく 1 つだけ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]}%"])
于 2013-03-07T10:47:40.223 に答える
1
def index
    @subjects = Subject.where('name' => 'Physics')
    @subjects.each do |subject|
     @users = subject.users
    end
end

これにより、サブジェクトごとのユーザーが得られます。

于 2013-03-07T10:12:21.950 に答える