17

ユーザー作成時に具体的にフィールドを設定したい。私は持っています

class RegistrationsController < Devise::RegistrationsController
  def create
    super
    @user.tag_list = params[:tags]
  end
end

タグパラメータを渡すチェックボックスがあり、サーバーログでタグパラメータが渡されていることを確認しました。ただし、コンソールで@ user.tag_listを呼び出すと、空白の応答が返され[]ます。

問題は、工夫の作成方法を操作することにあると感じています。@userを明示的に設定したことはありませんが、Deviseを使用して設定する方法がわかりません。deviseを使用するときに特定のフィールドを設定する方法を知っている人はいますか?

4

3 に答える 3

52

Devise メソッドをオーバーライドする方法を検索しているときにこれを見つけた人のための今後の参考のために、Devise メソッドのほとんどはブロックを受け入れるため、次のようなものも同様に機能するはずです。

class RegistrationsController < Devise::RegistrationsController
  def create
    super do
        resource.tag_list = params[:tags]
        resource.save
    end
  end
end
于 2014-10-27T19:56:18.787 に答える
12

superDevise::RegistrationsController の create アクションを呼び出すために使用する代わりに、Devise::RegistrationsController の create メソッドの実際のコードに置き換えます。

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
于 2012-04-12T06:16:24.213 に答える
8

create メソッドのコード全体を書き直したくない場合は、リソースが保存される前に呼び出されるDevise::RegistrationsControllerの保護されたメソッド:build_resource内にリソース変数を設定するだけです。

protected 

# Called before resource.save
def build_resource(hash=nil)
  super(hash)
  resource.tag_list = params[:tags]
end
于 2016-08-18T20:59:04.283 に答える