Rai*_*ner 1 ruby ruby-on-rails single-table-inheritance devise ruby-on-rails-3
这是我的模特:
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
Run Code Online (Sandbox Code Playgroud)
我正在尝试将字段名称添加到 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" %>
Run Code Online (Sandbox Code Playgroud)
但我得到一个模板错误:模型工作者不响应名称 我如何创建用户和工人之间的关联?
最好的问候,Rails初学者
我希望我能理解:我认为你还没有理解STI的概念.
让我们试着让它更清晰.
您从orinal模型派生的类继承了它的所有内容.您的原始模型应如下所示:
class User < ActiveRecord::Base
devise :database_authenticatable
attr_accessible :email, :password, :password_confirmation, :remember_me
end
Run Code Online (Sandbox Code Playgroud)
要真正成为STI,您必须生成一个迁移,以便在模型中包含"type".只需输入:
rails g migration add_type_to_users type:string
rake db:migrate
Run Code Online (Sandbox Code Playgroud)
然后设置你的工人模型,这非常简单:
class Worker < User
end
Run Code Online (Sandbox Code Playgroud)
正如您所做的那样,请在您的routes.rb文件中包含:
devise_for :users, :companies, :workers
Run Code Online (Sandbox Code Playgroud)
现在你完成了!
转到workers/sign_up,创建一个帐户并返回终端.
从此处输入rails c以启动控制台.
现在尝试: User.all.last,您应该看到刚刚使用'worker'类型创建的帐户
并尝试:Worker.last,再次,您找到创建的最新帐户.
请记住:Rails和简单一样好:)
| 归档时间: |
|
| 查看次数: |
2881 次 |
| 最近记录: |