3

シナリオを想像してください:

さまざまなタイプの生徒がいるクラスがあります。すべての学生は似たような属性を持っていますが、各タイプの学生には独自の属性もあります。そのため、MTI を使用して共通の属性をテーブルの students に保持し、個々の属性をそれぞれのテーブルに保持し、ポリモーフィズムを使用して、クラスの観点からそれらを処理するときに学生の型を抽象化しました。このチュートリアルに従いました: http://techspry.com/ruby_and_rails/multiple-table-inheritance-in-rails-3/

これから、これらのモデルにたどり着きました:

class Clazz < ActiveRecord::Base
  has_many :students
end

class Student < ActiveRecord::Base
  belongs_to :stu, :polymorphic => true
  belongs_to :clazz
end

class Student1 < ActiveRecord::Base
  has_one :student, :as => :stu
end

class Student2 < ActiveRecord::Base
  has_one :student, :as => :stu
end

私の問題は、特定の学生をインスタンス化したいときに発生します(学生を介してクラスに間接的に関連付けられています)。特定の学生との接続がなく、直接インスタンス化しようとすると、「:class」フィールドを認識しないと表示されるため、クラスから実行できません。

Student1.new(:clazz => @clazz, ... [other atributes]...)

unknown attribute: :class

これを達成する方法について誰かが私にヒントを与えることができますか? Tks

4

2 に答える 2

1

基本的に、@ Aaronが尋ねようとしているのは、これが機能するかどうかです。

class Student < ...
  belongs_to :clazz
end

class Student1 < ...
  has_one :student, :as => :stu

  accepts_nested_attributes_for :stu
end

Student1.new(:stu => {:clazz => @clazz},...[other attributes])

このようなオブジェクトのツリー全体で初期化する必要がある場合、ActiveRecordはデフォルトでは何の恩恵も受けません。

于 2011-06-07T20:55:19.357 に答える
1

ここで解決策を確認してください:http: //mediumexposure.com/multiple-table-inheritance-active-record/

これはhttp://techspry.com/ruby_and_rails/multiple-table-inheritance-in-rails-3/に似てい ます。

しかし、私の経験から、前者の方が優れています。1つは、method_missingを実装しますが、後者は実装しません。

于 2012-07-31T10:03:11.773 に答える