Придумайте Gem, добавьте компоновщики и измените redirect_to
Я использую гем 'Devise' в приложении rails 3.1.1 для создания пользователей и входа в систему, но мне нужно добавить поля для профиля как @user.build_profile, но я не знаю, где это добавить, мне также нужно изменить значение по умолчанию redirect_to после входа в систему.
2 ответа
Вы можете добавить необходимые поля в свои модели так же, как это обычно делается при миграции. Если вы используете по умолчанию разработайте представления через rails generate devise:views
, то вы захотите добавить свои поля в new
а также edit
взгляды внутри регистрации просмотров в разработке.
Что касается изменения перенаправления по умолчанию после sign_in, я бы начал с чтения Devise Wiki. Вы можете просто добавить в свой контроллер приложений:
protected
def stored_location_for(resource)
nil
end
def after_sign_in_path_for(resource)
#path to which you wish to redirect
end
end
Это позволит вам настроить этот маршрут. Вы также можете посмотреть на контроллер регистрации в devise, чтобы увидеть другие методы, которые вы можете переопределить.
Редактировать:
Переопределение контроллера:
Вы бы создали свой собственный контроллер, который наследует от Devise::RegistrationsController
, Оттуда вам нужно только указать методы, которые вам нужно переопределить, а не каждый из них. Например:
def create
build_resource
resource.build_profile
if resource.save
set_flash_message :notice, :signed_up
redirect_to after_sign_up_path_for(resource)
else
clean_up_passwords(resource)
render_with_scope :new
end
end
Затем добавьте вышеупомянутые строки для stored location
а также after_sign_in_path
, Вы также должны сказать Devise в своем routes.rb
использовать ваш новый контроллер с, devise_for :users, :controllers => { :registrations => 'your_controller_name }
У меня есть пример этого в моем блоге, и полный источник находится на Github.
Или вы просто переопределите build_resource
def build_resource *a, &b
super
resource.build_profile
end