Добавить пользовательское поле/столбец для разработки с помощью Rails 4
Я пытаюсь добавить поле/столбец full_name
в мою модель пользователя (используя драгоценный камень devise
) и Rails 4.
Большинство примеров онлайн рекомендуют использовать attr_accessible, но похоже, что в Rails 4 это должно быть по-другому.
Как мне добавить full_name
в мою модель User? Мне удалось успешно выполнить миграцию.
Файл: миграция > add_full_name_to_users
class AddFullNameToUsers < ActiveRecord::Migration
def change
add_column :users, :full_name, :string
end
end
Файл: Регистрация > приложение /views/devise/registration/new.html
.
.
.
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<%= f.label :full_name %>
<%= f.text_field :full_name, :autofocus => true %>
<%= f.label :email %>
<%= f.email_field :email %>
.
.
.
Ответы
Ответ 1
Как только ваша модель имеет свой атрибут full_name, вам нужно будет настроить разрешенные параметры для действий #sign_up и #account_update.
class ApplicationController < ActionController::Base
before_action :configure_devise_permitted_parameters, if: :devise_controller?
protected
def configure_devise_permitted_parameters
registration_params = [:full_name, :email, :password, :password_confirmation]
if params[:action] == 'update'
devise_parameter_sanitizer.for(:account_update) do
|u| u.permit(registration_params << :current_password)
end
elsif params[:action] == 'create'
devise_parameter_sanitizer.for(:sign_up) do
|u| u.permit(registration_params)
end
end
end
end
Ответ 2
Это решение должно работать, работая с sign_up и обновлять:
class ApplicationController < ActionController::Base
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:full_name])
devise_parameter_sanitizer.permit(:account_update, keys: [:full_name])
end
end
Ответ 3
Из разработки документации:
При настройке собственных представлений вы можете добавить новые атрибуты в формы. Rails 4 переместил параметрическую дезинфекцию от модели к контроллеру, заставив Devise обрабатывать эту проблему и на контроллере.
Вы должны проверить URL-адрес ниже, чтобы найти подход, который наилучшим образом соответствует вашим потребностям:
https://github.com/plataformatec/devise#strong-parameters
Ответ 4
Включить сильные параметры для разработки вместо attr_accessible. Для этого создайте новый initiliazer с этим контентом:
DeviseController.class_eval do
def resource_params
unless params[resource_name].blank?
params.require(resource_name).permit(:email, :password, :password_confirmation, :remember_me)
end
end
end