0

ユーザー --> 学生 // 従業員 (単一テーブル継承) で、両方とも組織 --> 学校 // 職場 (単一テーブル継承) に属している場合、関連付けを記述する適切な方法は何ですか? Organization_id を User クラスに入れ、それぞれのサブクラスに所属 /has をたくさん書いたのですが、User.school を呼び出すと、organization_id = 1 であるにもかかわらず、"nil" が返されます。

user.rb

class User < ActiveRecord::Base
  attr_accessible :email, :name, :password, :organization_id, :type
end

学生.rb

class Student < User
  belongs_to :school
end

従業員.rb

class Employee < User
  belongs_to :company
end

組織.rb

class Organization < ActiveRecord::Base
  attr_accessible :name
end

学校.rb

class School < Organization
  has_many :students
end

company.rb

class Company < Organization
  has_many :employees
end
4

2 に答える 2

0

単一テーブルの継承を使用しないことを強くお勧めします。そこからどのようなメリットが得られますか? 学校と会社がそうであるように、学生と従業員は別のものです。それらは別々のテーブルでなければなりません。長い目で見れば、あなたの人生はとてもシンプルになります。また、単一テーブルの継承を使用しない場合、この問題も解消されます。

于 2013-05-05T23:01:39.980 に答える
0

User クラスは学校の関連付けを定義しておらず、Student クラスについてまったく何も知りません。したがって、 User.school が機能することは期待できません。これはコードで定義されているため、Student.school が機能することを期待できます。

STI が列のパースペクティブを形成することは、レコードがマップされるモデルのサブタイプを示すタイプ文字列列を追加するだけです。

また、データをモデル化する方法を再考することもできます。学生は学校に所属していますが、ユーザーは会社や 2 つの学校に所属している場合もあります。

于 2013-05-05T23:17:36.157 に答える