我必须为可以是 Teacher、Student、Outsider 类型的类 Person 实现单表继承。
class Person < ActiveRecord::Base
end
class Teacher < Person
end
class Student < Person
end
class Outsider < Person
end
注册新用户时,我需要在路由和表单中做哪些更改。我在 people 表中有一个列(字符串)“类型”,可以将其实现为表单中的下拉列表以注册新用户。我还需要在表单中做任何其他事情,以便将用户注册为特定类型的人吗?我是否也需要对路线进行任何更改?
最佳答案
既然您使用一种形式来创建所有类型的 Person,那么您也应该坚持使用一个 Controller,这样您就不需要添加任何额外的路由。
type 属性实际上不是您应该手动分配给实例的东西,它应该通过选择要创建的模型类型来自动设置。
我不知道它在你的 Controller 和 View 中的样子,但你可以提取模型类型来创建,如下所示:
class_type = params[:type].constantize
@person = class_type.new
另一方面,如果 type 属性嵌套在 View 中的 form_for 中,则 type 属性可能会像 params[:person][:type] 一样发送到 Controller ,在这种情况下,它应该从:person 哈希,然后用于创建新实例。也许是这样的:
class_type = params[:person].delete(:type).constantize
@person = class_type.new(params[:person])
关于ruby - 单表继承情况下的表单助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4427651/