2013-04-30 14 views
39

Ja próbuje dodać full_name pola/kolumny do mojego modelu użytkownika (przy użyciu devise gem) i Rails 4.Dodaj pole niestandardowe/kolumnę do opracowania z Rails 4

Większość przykładów w Internecie recommend using attr_accessible, ale Wygląda na to, że w Railsach 4 należy podchodzić inaczej.

Jak dodać full_name do mojego modelu użytkownika? Udało mi się pomyślnie przeprowadzić migrację.

pliku: Migracja> add_full_name_to_users

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

Plik: Rejestracja> app/views/opracowania/Rejestracja/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 %> 
. 
. 
. 
+0

Czy to dotyczy: http://stackoverflow.com/questions/16471498/adding-extra-registration -fields-with-devise? –

+0

@dimitrismistriotis Tak, wygląda na ten sam problem. –

Odpowiedz

66

Gdy dany model ma swój atrybut FULL_NAME, będziesz musiał skonfigurować dopuszczalne parametry #sign_up i # account_update Wymyśl akcje.

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 
+0

Sprawdziło się idealnie dla mnie. Dzięki! – Sparkmasterflex

+2

Naprawdę brzmią! Musi być włączony na devis docs! – DoctorRu

1

Włącz silną Parametry dla opracować zamiast attr_accessible. Aby to zrobić, należy utworzyć nowy initiliazer z tych treści:

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 
12

Z dokumentacji opracować:

Kiedy dostosować swoje własne poglądy, może skończyć się dodając nowe atrybuty do formy. Railsy 4 przeniosły sanityzację parametrów z modelu do kontrolera, co spowodowało, że Devise poradził sobie z tym problemem także w kontrolerze.

Należy sprawdzić poniższy link, aby dowiedzieć się podejście, które będzie najlepiej dopasowane do Twoich potrzeb: https://github.com/plataformatec/devise#strong-parameters

+0

Plus jeden za dołączenie linku do dokumentacji – Sam

25

Rozwiązanie to powinno działać, pracując z sign_up i aktualizacji:

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 
+1

Otrzymuję błąd 'niezdefiniowana metoda '<<' dla # ' – Sidhannowe

Powiązane problemy