这是我的模特:
class User < ActiveRecord::Base
has_one :worker, :class_name => '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
注册表单
<h2>Create Worker</h2>
<%= form_for resource, :as => resource_name, :url => registration_path(resource_name) do |f| %>
<%= devise_error_messages! %>
<table summary="Subject form fields">
<tr>
<th>Name:</th>
<td><%= f.text_field :name %></td>
</tr>
<tr>
<th><%= f.label :email %></th>
<td><%= f.text_field :email %></td>
</tr>
<tr>
<th><%= f.label :kodeord %></th>
<td><%= f.password_field :password %></td>
</tr>
<tr>
<th><%= f.label :bekraeft_kodeord %></th>
<td><%= f.password_field :password_confirmation %></td>
</tr>
</table>
<p><%= f.submit "Create Worker" %></p>
<% end %>
<%= render :partial => "devise/shared/links" %>
但是我收到模板错误:Model Worker没有响应名称 我如何创建用户和工作者之间的关联?
祝你好运, Rails初学者
答案 0 :(得分:8)
我希望我能理解:我认为你还没有理解STI概念。
让我们试着让它更清楚。
从orinal模型派生的类继承了它的所有内容。您的原始模型应如下所示:
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
现在你已经完成了!
转到工作人员/ sign_up,创建一个帐户并返回终端。
从此处输入rails c
以启动控制台。
现在尝试:User.all.last
,您应该会看到刚刚使用“工人”类型创建的帐户
然后尝试:Worker.last
,再次在这里找到最新的帐户。
请记住:Rails非常简单:)