Модель профиля для пользователей Devise? - PullRequest
35 голосов
/ 29 ноября 2010

Я хочу расширить регистрационную форму моей установки устройства. Я создал модель профиля и сейчас спрашиваю себя, как можно добавить конкретные данные формы в эту модель. Где находится UserController устройства?

Заранее спасибо!

Ответы [ 5 ]

45 голосов
/ 30 ноября 2010

Предполагая, что у вас есть модель пользователя с has_one ассоциацией профиля, вам просто нужно разрешить вложенные атрибуты в User и изменить представление регистрации вашего устройства.

Запустите команду rails generate devise:views, затем измените устройствоregistrations#new.html.erb, как показано ниже, с помощью помощника по форме fields_for, чтобы ваша форма регистрации обновляла вашу модель профиля вместе с вашей моделью пользователя.

<div class="register">
  <h1>Sign up</h1>

  <% resource.build_profile %>
  <%= form_for(resource, :as => resource_name,
                         :url => registration_path(resource_name)) do |f| %>
    <%= devise_error_messages! %>

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

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

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

    <%= f.fields_for :profile do |profile_form| %>
      <h2><%= profile_form.label :first_name %></h2>
      <p><%= profile_form.text_field :first_name %></p>

      <h2><%= profile_form.label :last_name %></h2>
      <p><%= profile_form.text_field :last_name %></p>
    <% end %>

    <p><%= f.submit "Sign up" %></p>

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

А в вашей модели пользователя:

class User < ActiveRecord::Base
  ...
  attr_accessible :email, :password, :password_confirmation, :remember_me, :profile_attributes
  has_one :profile
  accepts_nested_attributes_for :profile
  ...
end
8 голосов
/ 07 января 2014

Чтобы дополнить ответ mbreining, в Rails 4.x вам нужно будет использовать строгие параметры , чтобы разрешить сохранение вложенных атрибутов. Создайте подкласс контроллера регистрации:

RegistrationsController < Devise::RegistrationsController

  def sign_up_params
    devise_parameter_sanitizer.sanitize(:sign_up)
    params.require(:user).permit(:email, :password, profile_attributes: [:first_name, :last_name])
  end
end
4 голосов
/ 29 ноября 2010

Это не очень понятно из вашего вопроса, но я предполагаю, что ваша модель Devise User, и вы создали другую модель Profile, которая принадлежит пользователю.

Вам нужно будет создать контроллердля вашей модели пользователя с rails g controller users.

Вам также необходимо сгенерировать представления для своих пользователей с помощью rails generate devise:views , чтобы пользователь мог добавить информацию о профиле при создании своей учетной записи.* Оттуда, как и в любой другой модели: создайте экземпляр пользователя и профиля и свяжите их.Затем в контроллерах используйте current_user.profile для доступа к профилю текущего пользователя.

Обратите внимание, что если вы собираетесь управлять пользователями таким образом, вам необходимо удалить модуль :registerable из User модель (также читать https://github.com/plataformatec/devise/wiki/How-To:-Manage-users-through-a-CRUD-interface)

2 голосов
/ 11 октября 2015

Я рекомендую посмотреть Создание профиля для пользователей Devise , чтобы получить более свежий ответ на тот же вопрос и использовать Rails 4 + Devise

2 голосов
/ 30 марта 2014

Другой способ, чтобы не помещать ресурс здания в представление, - переписать контроллер devise и, если быть точным, новый метод, все, что вам нужно сделать, это изменить его на:

 def new
   build_resource({})
   resource.build_profile 
   respond_with self.resource
 end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...