我有4个模型:Patient
,Admin
,Doctor
,User
。 Patient
,Admin
和Doctor
延伸User
。
// patient.rb
class Patient < User
end
// doctor.rb
class Doctor < User
end
// admin.rb
class Admin < User
end
但是,我无法获得特定于子类的属性。当我打电话时,例如patient.fathername
,它会给我错误
NoMethodError:#Patient的未定义方法`fathername':0x007fa4c172a188
虽然我的fathername
模型中有Patient
列。
//schema.rb
create_table "patients", force: :cascade do |t|
t.string "fathername"
end
对这个问题做了一些研究,并意识到其他使用STI的人也遇到过这个问题。但是,我无法理解问题的任何解决方案和来源。 STI和获取属性有什么问题?
答案 0 :(得分:1)
您应该将fathername字段添加到模型User,因为这是从ActiveRecord :: Base继承的
STI仅使用一个表(在本例中为Users)并添加名为&#34的字段;键入&#34;保存了保存记录的模型的名称,它可以保存&#34;患者&#34;对于患者记录,&#34;医生&#34;对于医生记录等都在同一个表中用户。
http://api.rubyonrails.org/classes/ActiveRecord/Inheritance.html
我希望这会有所帮助。