2014-12-30 3 views
1

Я создал пользовательскую модель через драгоценный камень Devise, который позволяет отправлять по электронной почте, first_name и пароль при регистрации.Сохранение других атрибутов модели пользователя с помощью Devise gem

def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) << :first_name 
end 

Я хотел бы сохранить другие атрибуты, такие как last_name, city и т. Д. Для модели пользователя. Я выполнил миграцию и вижу эти атрибуты в моей схеме.

Однако, когда я нахожусь на странице пользователя/редактирования и пытаюсь сохранить, новые атрибуты не сохраняются.

Я запустил команду для редактирования контроллеров разработки, но смущен.

rails generate devise:controllers users 

мне еще нужно создать UsersController < ApplicationController для того, чтобы принять другие атрибуты в модель пользователя во время редактирования/обновления?

Тогда я мог бы просто разрешить все при попытке обновить

def user_params 
    params.require(:user).permit! 
end 

Благодарности

ответ

1

Попробуйте это:

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

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:user) << :first_name 
    end 
end 
+0

Я заметил, что это происходит в производстве героику? Вы испытываете то же самое? –

1

Добавьте следующий фильтр к контроллеру приложения:

before_action :configure_permitted_parameters, if: :devise_controller? 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :email, :password, :password_confirmation) } 
    end 

Это для регистрации. Чтобы обновить информацию о пользователе, добавьте следующую строку кода в фильтр configure_permitted_parameters.

devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:first_name, :email, :password, :password_confirmation, :current_password) } 
+0

Что делать, если я добавлю еще 20 атрибутов? Должен ли я перечислить их все? Есть ли более простой способ? –

+0

Добавление всех атрибутов - хорошее решение. –

+0

В настоящее время я просто использую >> params.require (: user) .permit! в пользовательском контроллере –

Смежные вопросы