ruby - 单表继承情况下的表单助手

标签 ruby routes single-table-inheritance ruby-on-rails-3 formhelper

我必须为可以是 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/

相关文章:

database-design - 单表继承是解决我的 Rails 问题的正确解决方案吗?

ruby - 从 Docker 容器登录到 macOS 中的系统日志/控制台?

ruby-on-rails - 在 Flash 警报 Rails 3 中显示错误消息

html - Bootstrap 轮播中的图像未填充轮播区域

Angular 6 : Guard on all routes is not working

ruby-on-rails-3 - Rails做一些事情并重定向?

ruby - 比较 ruby 哈希

ruby-on-rails - 使用可选参数进行路由

java - 如何将同一层次结构中每个子类的集合映射到一个所属类?

java - 使用 JPA 和 Spring Boot 查询实体类型(鉴别器)