2011-08-16 14 views
18

Próbuję dodać atrybut nazwy do modelu użytkownika dostarczonego przez Devise. Dodałem kolumnie „Nazwa” do mojej bazy danych i zmienił znak widok tak, że prosi o nazwę użytkownika:Dodawanie atrybutu nazwy do "Użytkownika" w Devise

<h2>Sign up</h2> 

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %> 
    <%= devise_error_messages! %> 

    <p><%= f.label :name %><br /> 
    <%= f.text_field :name %></p> 

    <p><%= f.label :email %><br /> 
    <%= f.email_field :email %></p> 

    <p><%= f.label :password %><br /> 
    <%= f.password_field :password %></p> 

    <p><%= f.label :password_confirmation %><br /> 
    <%= f.password_field :password_confirmation %></p> 

    <p><%= f.submit "Sign up" %></p> 
<% end %> 

<%= render :partial => "devise/shared/links" %> 

To pozwala mi się zalogować, ale kiedy sprawdzić w bazie danych po wykonaniu tak, name: nil . Czy muszę coś dodać do kontrolera Devisera w wersji User? Dzięki!

+1

Nie musisz również utworzyć migracji, która dodaje "nazwę" do tabeli bazy danych dla użytkownika? –

Odpowiedz

17

w swoim modelu użytkownika zlokalizuj;

attr_accessible :email, :password, :password_confirmation, :remember_me 

i dodać: imię na końcu

+11

co z Rails4? ponieważ nie ma czegoś takiego, co jest dostępne na stronie: –

+0

@namiheike Nie jestem pewien, jaka jest obecnie odpowiedź dla rails 4, ale szybką poprawką byłoby dodanie gem'ów "protected_attributes" do twojego gemfile. Następnie możesz użyć attr_accessible – Jordan

+3

Zobacz tutaj dla Rails 4: https://github.com/plataformatec/devise#strong-parameters – AmitA

2

Tak. Dodaj :name do attr_accessible użytkownika w modelu

6

dla szyn 4

Zastosowanie jak ten

protected 
def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation, :remember_me) } 
    devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :username, :email, :password, :remember_me) } 
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :email, :password, :password_confirmation, :current_password) } 
end 

dodać dodatkowe pola na końcu.

+0

Gdzie mogę to dodać? Czy muszę utworzyć kontroler user_controller? –

+1

'app/controllers/application_controller.rb' Przykład: https://github.com/mistergiri/ExamAwesomeIdeas/blob/master/app/controllers/application_controller.rb – Giri

7

Dodaj ten kod do application_controller.rb

before_action :configure_permitted_parameters, if: :devise_controller? 



protected 
def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation, :remember_me) } 
    devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :username, :email, :password, :remember_me) } 
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :email, :password, :password_confirmation, :current_password) } 
end 
1

napisać ten kod wewnątrz klasy ApplicationController ...

before_action :configure_permitted_parameters, if: :devise_controller? 

     protected 

     def configure_permitted_parameters 
     devise_parameter_sanitizer.for(:sign_up) << :name 
0

Odkomentuj część wygenerowanego kodu:

class Users::RegistrationsController < Devise::RegistrationsController 
    before_filter :configure_sign_up_params, only: [:create] 

    protected 

    def configure_sign_up_params 
    devise_parameter_sanitizer.for(:sign_up) << :name 
    end 
end 
0
private 

    def sign_up_params 
    params.require(:user).permit(:name,:email,:gender,:age,:password,:password_confirmation) if params[:user].present? 
    end 

Dodaj ten w sterowniku, który rozciąga się domyślny kontroler rejestracyjny opracować za

2

dla szyn 5 (w rzeczywistości opracować 4)

Przetestowane: Szyny 5.1.0 (opracowanie 4.2.1)

Nie nie ma potrzeby pracy z kontrolerami devis.

Wystarczy dodać następujące wpisy do application_controller.rb:

before_action :configure_permitted_parameters, if: :devise_controller? 


protected 

    def configure_permitted_parameters 

    devise_parameter_sanitizer.permit(:sign_up, keys: [:name]) 

    end 

devise_parameter_sanitizer.for już nie pracuje z Rails 5 (być bardziej poprawne, to nie jest obsługiwana w devise 4, która jest oczekiwana wersja Devise w Rails 5 kontekst): użyj devise_parameter_sanitizer.permit, aby uniknąć błędu undefined method 'for' for #<Devise::ParameterSanitizer

Powiązane problemy