39 votes

Ajouter un champ / une colonne personnalisé à concevoir avec Rails 4

Je suis d'essayer d'ajouter un full_name champ/colonne de mon modèle d'Utilisateur (à l'aide de l' devise gem) et les Rails 4.

La plupart des exemples en ligne vous recommandons d'utiliser attr_accessible, mais il semble que cela devrait être abordé de manière différente dans les Rails 4.

Comment pourrais-je ajouter full_name de mon modèle d'Utilisateur? J'ai été en mesure d'exécuter avec succès la migration.

Fichier: Migration > add_full_name_to_users

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

Fichier: Inscription > app/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 %>
.
.
.

66voto

heymatty Points 256

Une fois que votre modèle a sa colonne full_name, vous devez configurer les paramètres autorisés pour les actions sign_up et 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) { 
        |u| u.permit(registration_params << :current_password)
      }
    elsif params[:action] == 'create'
      devise_parameter_sanitizer.for(:sign_up) { 
        |u| u.permit(registration_params) 
      }
    end
  end

end
 

26voto

yozzz Points 196

Cette solution fonctionne très bien pour moi, avec sign_up et update :

   class ApplicationController < ActionController::Base
    before_filter :configure_permitted_parameters, if: :devise_controller?

    protected

    def configure_permitted_parameters
      devise_parameter_sanitizer.for(:sign_up) << :full_name
      devise_parameter_sanitizer.for(:account_update) << :full_name
    end
  end
 

Voir aussi ceci

12voto

Leo Points 459

De concevoir de la documentation:

Lorsque vous personnalisez votre propre point de vue, vous pouvez finir par l'ajout de nouveaux attributs de formes. Rails 4 déplacé le paramètre d'assainissement à partir du modèle du contrôleur, causant Concevoir pour gérer cette préoccupation au contrôleur ainsi.

Vous devriez vérifier l'url ci-dessous pour trouver l'approche qui convient le mieux à vos besoins: https://github.com/plataformatec/devise#strong-parameters

1voto

mouhcine Points 41

Activer les paramètres forts pour Devise au lieu de attr_accessible. Pour ce faire, créez un nouveau initiliazer avec ce contenu:

 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
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X