如何在迁移中将自定义对象添加到Rails模型?

时间:2013-08-21 02:12:36

标签: ruby-on-rails ruby

我有一个名为service_request的Rails模型,我想添加一个request_form对象。我在models目录中定义了RequestForm类,尽管它仅用作ServiceRequest类的“has-A / helper”对象,而不是数据库的实际部分。我正在尝试添加迁移,如下所示:

rails generate migration AddRequestFormToServiceRequest request_form:request_form

但是我得到了顶级错误:

PG::UndefinedObject: ERROR:  type "request_form" does not exist

我是否必须在某个特定的位置定义此类才能工作?

由于

2 个答案:

答案 0 :(得分:1)

Rails迁移用于创建和修改数据库的结构。

如果你有一个现有的模型ServiceRequest,并且想要将RequestForm与它相关联,你应该使用模型生成器,而不是迁移生成器。

rails g model RequestForm title:string content:text service_request_id:integer

这会创建一个模型RequestForm和一个数据库表request_forms,其中包含对相关service_request的外键引用

您还必须在模型中添加关系,如:

class ServiceRequest < ActiveRecord::Base
   has_many :request_forms
end

class RequestForm < ActiveRecord::Base
  belongs_to :service_request
end

您获得的PG错误是因为您尝试将request_form分配给Postgres数据库中不存在的自定义类型。

答案 1 :(得分:0)

这类似于模型生成器语法可能无法捕获您想要的内容的情况。尝试:

rails generate migration AddRequestFormToServiceRequest 

然后打开它在编辑器中创建的AddRequestFormToServiceRequest迁移文件,并添加手动添加的列。