当有STI时,Rails会设计注册表

时间:2011-01-10 10:58:51

标签: ruby-on-rails devise single-table-inheritance

我不知道如何创建一个工人和一个协会。所以我能够将它们联系在一起。我在用户中有一个类型colulm 这是我的表格(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! %>

      <p><%= f.label :email %><br />
      <%= f.text_field :email %></p>

      <p><%= f.label :kodeord %><br />
      <%= f.password_field :password %></p>

      <p><%= f.label :bekraeft_kodeord %><br />
      <%= f.password_field :password_confirmation %></p>

      <p><%= f.submit "Create" %></p>
    <% end %>

<%= render :partial => "devise/shared/links" %>

这是我的模特:

Class Worker < User
devise :database_authenticatable, :registerable
end

Class Company < User
devise :database_authenticatable, :registerable
end

Class User < Appliaction::Base
devise :database_authenticatable, :registerable
end

我想创建一个创建User和Worker的注册表单。 我在Workers表中列了姓名,年龄和地址,我想在注册表中填写。

它应该是嵌套表单吗?我应该在worker和User表之间创建关联。

祝你好运, Rails初学者

2 个答案:

答案 0 :(得分:4)

好的找到了答案,你需要的是为你的子类添加路由,然后将用户直接添加到相关的路由,比如

devise_for :companies
devise_for :workers

然后你可能想要为每个人生成视图

script/rails generate devise:views companies

如果您的视图中没有重大差异,您可以在公司模板中的用户模板中呈现文件,如此

render :file => 'users/registrations/new'

在您的控制器和视图中,您仍将使用标准的user_signed_in?

希望如果找到更好的方法,请告诉我

答案 1 :(得分:0)

我认为您正在寻找Worker has_one User。我认为您不需要从User继承您的Worker类。如果您想在创建工作人员后创建用户,可以在after_create回调中执行此操作。