当有STI时,Rails设计为注册表单添加字段

这是我的模特:

class User  'Worker', :foreign_key => :worker_id devise :database_authenticatable accepts_nested_attributes_for :worker attr_accessible :worker_id, :email, :password, :password_confirmation, :remember_me, :workers_attributes, :worker_attributes, :name, :worker end class Worker < User devise :database_authenticatable, :registerable belongs_to :user attr_accessible :name, :worker, :workers end 

我正在尝试将字段名称添加到http:// localhost:3000 / workers / sign_up的注册表单中

注册表格

 

Create Worker

resource_name, :url => registration_path(resource_name) do |f| %>
Name:

"devise/shared/links" %>

但我得到一个模板错误:模型工作者不响应名称我如何创建用户和工人之间的关联?

最好的问候,Rails初学者

我希望我能理解:我认为你还没有理解STI的概念。

让我们试着让它更清晰。

您从orinal模型派生的类inheritance了它的所有内容。 您的原始模型应如下所示:

 class User < ActiveRecord::Base devise :database_authenticatable attr_accessible :email, :password, :password_confirmation, :remember_me end 

要真正成为STI,您需要生成一个迁移,以便在模型中包含“type”。 只需输入:

 rails g migration add_type_to_users type:string rake db:migrate 

然后设置你的工人模型,这非常简单:

 class Worker < User end 

正如您所做的那样,请在您的routes.rb文件中包含:

 devise_for :users, :companies, :workers 

现在你已经完成了!

转到workers / sign_up,创建一个帐户并返回终端。

从这里,键入rails c以启动控制台。

现在尝试: User.all.last ,您应该看到刚刚使用'worker'类型创建的帐户

然后尝试: Worker.last ,在这里,您再次找到创建的最新帐户。

请记住:Rails和简单一样好:)