Aggiungi campo / colonna personalizzati da concepire con Rails 4

Sto tentando di aggiungere un campo / colonna full_name al mio modello utente (utilizzando la gem del dispositivo) e Rails 4.

La maggior parte degli esempi online raccomandano l’uso di attr_accessible , ma sembra che questo dovrebbe essere affrontato in modo diverso in Rails 4.

Come aggiungerei full_name al mio modello utente? Sono stato in grado di eseguire correttamente la migrazione.

File: Migrazione> add_full_name_to_users

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

File: Registrazione> app / views / devise / registration / new.html

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

Una volta che il tuo modello ha il suo attributo full_name, dovrai configurare i parametri consentiti per le azioni #sign_up e #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 

Questa soluzione dovrebbe funzionare, lavorando con sign_up e update :

  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 

Dalla documentazione inventata:

Quando personalizzi le tue visualizzazioni, potresti finire per aggiungere nuovi attributi ai moduli. Rails 4 ha spostato il parametro sanitizzazione dal modello al controller, facendo in modo che Devise gestisca questo problema anche sul controller.

Dovresti controllare l’url qui sotto per trovare l’approccio più adatto alle tue esigenze: https://github.com/plataformatec/devise#strong-parameters

Abilita parametri forti per Devise anziché attr_accessible. Per fare ciò, crea un nuovo initiliazer con quel contenuto:

 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