1

私は現在、生徒と保護者の間に多対多の関係を持たせるように fedena を調整しています (1 対多の生徒 : 保護者ではなく)。

だからこれは私がやったことです:

class Guardian < ActiveRecord::Base
  has_many   :parentings, :dependent=>:destroy
  has_many   :students, :through=>:parentings
end

class Student < ActiveRecord::Base
  has_many   :parentings, :dependent=>:destroy
  has_many   :guardians, :through=>:parentings
end

class Parenting < ActiveRecord::Base
    attr_accessible :student_id, :guardian_id
    belongs_to :student
    belongs_to :guardian
end

Guardian.rb内には、次のクラス メソッドがありました。

def self.shift_user(student)
  # find all the guardians having a ward_id = student.d (comment my own)
  self.find_all_by_ward_id(student.id).each do |g|
  ..
end

新しく定義されたリレーションシップを使用して変更したい

self.find_all_by_student_id(student.id).each do |g|
..

うまくいきません!ガーディアンには Parenting クラスを通じて多くの生徒がいるとすでに定義しているので、うまくいくと思いました..上記のコマンドのいくつかの順列を試しましたが、エラーが発生し続けます。

undefined method `find_all_by_student_id' for #<Class:0x1091c6b28>

アイデア?私は使用ruby 1.8.7していますRoR 2.3.5

4

2 に答える 2

0

名前付きスコープとより複雑なクエリを使用してこれを行うことができます

class Guardian < ActiveRecord::Base
  has_many   :parentings, :dependent=>:destroy
  has_many   :students, :through=>:parentings

  named_scope :find_all_by_student_id, lambda {|student_id| 
    { :all,
      :select => "guardians.*",
      :joins => "JOIN parentings ON parentings.guardian_id = guardians.id 
                 JOIN students ON students.id = parentings.student_id",
      :conditions = ["students.id = ?", student_id] } }
end
于 2013-04-27T15:48:24.007 に答える