Я хочу расширить форму регистрации моей установки. Я создал модель профиля и задаюсь вопросом, как я могу добавить конкретные данные формы к этой модели. Где находится элемент управления UserController?
заблаговременно!
Я хочу расширить форму регистрации моей установки. Я создал модель профиля и задаюсь вопросом, как я могу добавить конкретные данные формы к этой модели. Где находится элемент управления UserController?
заблаговременно!
Предполагая, что у вас есть модель пользователя с ассоциацией профиля has_one, вам просто нужно разрешить вложенные атрибуты в User и изменять вид регистрации вашего устройства. Запустите команду "rails generate devise: views", а затем измените представление регистрации dev # new.html.erb, как показано ниже, используя помощник fields_for form, чтобы ваша форма регистрации обновила вашу модель Profile вместе с вашей моделью пользователя.
<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
Чтобы дополнить mbreining answer, в 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
Это не очень понятно из вашего вопроса, но я предполагаю, что ваша модель 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)
Другой способ, чтобы не создавать ресурс здания в представлении, - это переписать контроллер разработки, а точнее, новый метод, все, что вам нужно сделать, это изменить его на:
def new
build_resource({})
resource.build_profile
respond_with self.resource
end
Я рекомендую посмотреть "Создание профиля для разработчиков" для более позднего ответа на тот же вопрос и использования Rails 4 + Devise