访问模型属性(STI)时未定义的方法

时间:2015-07-29 17:38:06

标签: ruby-on-rails ruby web sti

我有4个模型:PatientAdminDoctorUserPatientAdminDoctor延伸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和获取属性有什么问题?

1 个答案:

答案 0 :(得分:1)

您应该将fathername字段添加到模型User,因为这是从ActiveRecord :: Base继承的

STI仅使用一个表(在本例中为Users)并添加名为&#34的字段;键入&#34;保存了保存记录的模型的名称,它可以保存&#34;患者&#34;对于患者记录,&#34;医生&#34;对于医生记录等都在同一个表中用户。

http://api.rubyonrails.org/classes/ActiveRecord/Inheritance.html

我希望这会有所帮助。