Rails разработали добавление полей в регистрационную форму при наличии STI - PullRequest
1 голос
/ 11 января 2011

Вот мои модели:

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" %>

Но я получаю ошибку шаблона: работник модели не отвечает на имя И как мне создать связь между пользователем и работником?

С уважением, Начинающий рельс

1 Ответ

8 голосов
/ 11 января 2011

Надеюсь, я хорошо понимаю: я думаю, что вы еще не поняли концепцию ИППП.

Попробуем прояснить ее.

Классы, которые вы извлекаете из исходной модели, наследуют всеот него.Ваша оригинальная модель должна выглядеть следующим образом:

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

Чтобы действительно быть ИППП, вы должны сгенерировать миграцию, чтобы включить «тип» в вашу модель.Просто введите:

rails g migration add_type_to_users type:string
rake db:migrate

Затем настройте свою рабочую модель, которая действительно проста:

class Worker < User
end

Как вы сделали, включите в свой файл rout.rb:

devise_for :users, :companies, :workers

Теперь все готово!

Перейдите к работникам / sign_up, создайте учетную запись и вернитесь к своему терминалу.

Здесь введите rails c, чтобы запустить консоль.

Теперь попробуйте: User.all.last, вы должны увидеть учетную запись, которую вы только что создали, с «рабочим» типом

И попробуйте: Worker.last, здесь снова вы найдете последнюю созданную учетную запись.

Пожалуйста, помните: Rails настолько же прост, насколько и прост:)

...