2016-04-07 21 views
0
class RegistrationsController < Devise::RegistrationsController 

    def create 
    super 
    if resource.save 
     if request.fullpath == '/techie/signup' 
     resource.role = :techie 
     resource.save 
     end 
    end 
    end 

end 

私はこれをdeviseコントローラよりも優先しています。私は '/ techie/signup /'というパスを持つ別のサインアップビューを持っています。彼らがサインアップしたページ。私は隠されたフィールドにその物を利用することができるので、役割を果たさたくありません。私はここで何が間違っていますか? deviseに登録して役割を追加する

ありがとうございました

+0

あなたはコードにブレークポイントを入れて、データがどのくらいの距離にあるのか見てきましたか? – SomeSchmo

答えて

1

これを試してみてください。

URI(request.referer).path 

を用い

def create 
    super do |res| 
     if request.path_info == '/techie/signup' 
     res.role = :techie 
     res.save! 
     end 
    end 
    end 
+0

未定義のメソッドを取得する 'fullpath '推測では、モデルにヘルパーを含める必要がありますが、MVCを破ることはありませんか? –

+0

@SaraAl私が私の上でテストすることができます。私は 'res'オブジェクトがフルパスを提供しているかどうかわかりません。ありがとう! – 7urkm3n

+0

ありがとう!隠されたフィールドに基づいて役割を編集する人以外の多くの人が見つかりませんでしたし、セキュリティのために最善だとは思わない、URLパスに基づいて設定するほうがいいよ –

1

代わりのrequest.full_path又はrequest.path_infoを使用して、それを解決しました。

+1

nice、このURI(request.referer).path'を正確に返すものは何ですか? – 7urkm3n

+0

@ 7urkm3n登録コントローラーの作成メソッドで '/ techie/signup'を返します。現在のパスを取得することは、登録の作成アクションと相関関係がないということは、実際にはまだ/ techie/signupが現在のパスであることを意味するわけではありません。これは前のパスであり、request.refererは最後のページを取得します。 –

関連する問題