Переопределение метода регистрации регистрации

Я хочу, чтобы задать поле, когда пользователь создан. У меня

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