0

アプリケーションで単一テーブルの継承を使用していて、祖先から継承されたユーザーを構築する際に問題が発生しています。たとえば、次の設定を使用します。

class School < ActiveRecord::Base

  has_many :users

end

class User < ActiveRecord::Base


  attr_accessible :type #etc...

  belongs_to :school

end

Class Instructor < User

   attr_accessible :terms_of_service
   validates :terms_of_service, :acceptance => true

end


Class Student < User

end

Schoolinstructorのインスタンスからまたはstudentレコードを作成するにはどうすればよいですか? 次のようなことを試みると、新しいユーザーインスタンスのみが得られ、インストラクター固有のフォームを生成するときに後でエラーが発生するなど、インストラクター固有のフィールドにアクセスできません。コンソールからビルドすると、大量割り当てエラーが発生します(指定されたインストラクターレコードではなく、ユーザーレコードを作成しようとしています)。私は学校の例を挙げましたSchool.first.instructors.build(....)terms_of_service、しかし、User テーブルから継承したい他のいくつかの関連付けがあるため、データベースでコードやフィールドを繰り返す必要はありません。STI セットアップで関連付けを共有できないため、この問題が発生していますか?

4

3 に答える 3

1

そして他に何が:

class School < ActiveRecord::Base
  has_many :users
  has_many :instructors
end

class Instructor < User 
  attr_accessible :terms_of_service # let it be at the first place. :)

  validates :terms_of_service, :acceptance => true
end
于 2013-03-07T21:43:12.217 に答える
1

インストラクターを明示的に指定する必要があります

class School < ActiveRecord::Base

  has_many :users
  has_many :instructors,:class_name => 'Instructor', :foreign_key => 'user_id'

end
于 2013-03-07T21:26:13.160 に答える
0

OK、それは私の学校のモデルusersの中に古い協会があることに起因する問題の一部のようです。それを削除し、学生とインストラクターの関連付けを追加することは個別に機能しました。

School.rbを更新しました:

class School < ActiveRecord::Base

  #removed:
  #has_many :users this line was causing problems

  #added
  has_many :instructors
  has_many :students

end
于 2013-03-07T22:43:49.880 に答える