Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 访问模型属性(STI)时的未定义方法_Ruby On Rails_Ruby_Web_Sti - Fatal编程技术网

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

Ruby on rails 访问模型属性(STI)时的未定义方法,ruby-on-rails,ruby,web,sti,Ruby On Rails,Ruby,Web,Sti,我有4种型号:患者,管理员,医生,用户患者,管理员和医生扩展用户 // patient.rb class Patient < User end // doctor.rb class Doctor < User end // admin.rb class Admin < User end 对这个问题做了一些研究,并意识到其他使用STI的人也遇到了这个问题。然而,我无法理解任何解决方案和问题的根源。STI和获取属性有什么问题?您应该向模型用户添加父名称字段,因为这是从Acti

我有4种型号:
患者
管理员
医生
用户
<代码>患者,
管理员
医生
扩展
用户

// patient.rb
class Patient < User
end

// doctor.rb
class Doctor < User
end

// admin.rb
class Admin < User
end

对这个问题做了一些研究,并意识到其他使用STI的人也遇到了这个问题。然而,我无法理解任何解决方案和问题的根源。STI和获取属性有什么问题?

您应该向模型用户添加父名称字段,因为这是从ActiveRecord::Base继承的字段

STI只处理一个表(在本例中为用户),并添加一个名为“type”的字段,该字段保存保存记录的模型的名称,它为患者记录保存“Patient”,为医生记录保存“Doctor”,等等。所有这些都在同一个表用户中


我希望这有帮助。

什么是STI?您是创建迁移来创建父表还是编辑schema.rb?@eirikir我已正确创建了所有模型,并提供了一个类型列来指定其类型。STI是单表继承。我已经正确地创建了我的模型。我的用户模型有一个类型列,指定类型:患者、医生和管理员。但是,我无法访问患者模型的列。我将展开我的回答,您需要在用户表中创建父名称字段,STI对所有模型使用相同的表。
//schema.rb
create_table "patients", force: :cascade do |t|
t.string   "fathername"
end