Переопределение метода регистрации регистрации
Я хочу, чтобы задать поле, когда пользователь создан. У меня
class RegistrationsController < Devise::RegistrationsController
def create
super
@user.tag_list = params[:tags]
end
end
У меня есть флажки, которые передают параметр тегов, и я проверил в журналах сервера, что передается параметр тегов. Однако, когда я вызываю @user.tag_list в консоли, я просто получаю пустой ответ []
.
Я чувствую, что проблема заключается в том, что я манипулирую с созданным методом создания. Я не задал @user в явном виде, но не знаю, как его установить, используя Devise. Кто-нибудь знает, как установить конкретное поле при использовании разработки?
Ответы
Ответ 1
В будущем для тех, кто находит это при поиске методов переопределения методов, большинство методов Devise принимают блок, поэтому что-то вроде этого должно работать также:
class RegistrationsController < Devise::RegistrationsController
def create
super do
resource.tag_list = params[:tags]
resource.save
end
end
end
Ответ 2
Вместо того, чтобы использовать super
для вызова действия создания Devise:: RegistrationsController, замените его на фактический код метода создания Devise:: RegistrationsController
build_resource
resource.tag_list = params[:tags] #******** here resource is user
if resource.save
if resource.active_for_authentication?
set_flash_message :notice, :signed_up if is_navigational_format?
sign_in(resource_name, resource)
respond_with resource, :location => after_sign_up_path_for(resource)
else
set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_navigational_format?
expire_session_data_after_sign_in!
respond_with resource, :location => after_inactive_sign_up_path_for(resource)
end
else
clean_up_passwords resource
respond_with resource
end
Ответ 3
Если вы не хотите переписывать весь код метода create, вы можете просто установить переменную ресурса внутри защищенного метода : build_resource Devise:: RegistrationsController. > , который вызывается до сохранения ресурса.
protected
# Called before resource.save
def build_resource(hash=nil)
super(hash)
resource.tag_list = params[:tags]
end