3

アクティブなレコードで基本的な検索を実行しようとしていますが、has_and_belongs_to_many の関係が原因で問題が発生しています。以下は、私が作成したレコードとスコープです。

Class Section << ActiveRecord::Base
  has_and_belongs_to_many :teachers
  attr_accessible :department, :class_size

  scope :department_scope, lambda { |dept| where("department = ?", dept) }
  scope :teacher_fname_scope, lambda { |n| joins(:teachers) & Teacher.has_first_name(n) }
end


Class Teacher << ActiveRecord::Base
  has_and_belongs_to_many :sections
  attr_accessible :first_name, :last_name

  scope :has_first_name, lambda { |fname| where("first_name = ?", fname) }
end

Rails 3.2 では、セクション モデルの基本的な検索を作成しています。特定の first_name を持つ教師を含むすべてのセクションを検索したいとします。

上記のスコープを使用して試してみましたが、 *Section.teacher_fname_scope* から返されるのは空の配列だけです。

(実際には複数のフィールドを用意して、ユーザーが department や class_size などの Section フィールドも検索できるようにするため、おそらく複数のスコープを作成し、最終的にそれらを連鎖させます。たとえば、上記の検索は、department や class_size によっても制限されますしかし、私の理解では、スコープは直交しているため、これは上記の質問には関係ありません.)

助けてくれてありがとう。

4

2 に答える 2

4

勝利の範囲は次のようです。

Class Section << ActiveRecord::Base
  scope :teacher_fname_scope, lambda { |n| joins(:teachers).("teachers.first_name = ?", n) }
end

これは理にかなっていますが、Ryan Bates がhttp://railscasts.com/episodes/215-advanced-queries-in-rails-3?view=asciicastで話していることを考えると、オリジナルが機能しなかった理由がわかりません。

于 2012-08-20T17:59:45.933 に答える
0

これは古い質問ですが、私はここに落ちたので、この質問をした人に答えを残します:

class Teacher < ActiveRecord::Base
  scope :by_name, ->(name) { where(first_name: name) }
end

class Section < ActiveRecord::Base
  has_and_belongs_to_many :teachers
  scope :by_teacher_name, ->(name) {
    joins(:teachers).merge(Teacher.by_name(name)) 
   }
end
于 2016-06-27T01:47:17.883 に答える