Вопрос по ruby-on-rails, ruby-on-rails-4 – Добавить настраиваемое поле / столбец для разработки с помощью Rails 4

39

Я пытаюсь добавитьfull_name поле / столбец для моей модели пользователя (используяdevise жемчужина) и рельсы 4.

Большинство примеров онлайнрекомендую использовать attr_accessible, но, похоже, к этому следует подходить по-другому в Rails 4.

Как бы я добавилfull_name моей модели пользователя? Я'удалось успешно запустить миграцию.

Файл: Миграция> add_full_name_to_users

class AddFullNameToUsers < ActiveRecord::Migration
  def change
    add_column :users, :full_name, :string
  end
end

Файл: Регистрация> приложение / просмотров / изобрести / регистрация / new.html

.
.
.
 resource_name, :url => registration_path(resource_name)) do |f| %>
  

  
   true %>

  
  
.
.
.
@dimitrismistriotis Да, похоже, та же проблема. Neil Kelty
Это связано с:stackoverflow.com/questions/16471498/…? Dimitrios Mistriotis

Ваш Ответ

4   ответа
12

Когда вы настраиваете свои собственные представления, вы можете добавить новые атрибуты к формам. Rails 4 переместил санацию параметров из модели в контроллер, в результате чего Devise решил эту проблему и в контроллере.

Вы должны проверить URL ниже, чтобы найти подход, который наилучшим образом соответствует вашим потребностям:https://github.com/plataformatec/devise#strong-parameters

Плюс один за включение ссылки на документацию Sam
66

вам нужно будет настроить разрешенные параметры для действий #sign_up и #account_update Devise.

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
Работал отлично для меня. Спасибо! Sparkmasterflex
Действительно спасибо! Должен быть включен в документацию для разработчиков! DoctorRu
26

работая сПодписаться а такжеОбновить:

  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
Я получаю ошибкуundefined method ' Sidhannowe
1

о создайте новый 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

Похожие вопросы