2016-06-13 4 views
0

私はRailsのアプリを使って実験しています - 私はユーザーのログインのためにDeviseを使用していますが、ユーザーが正常にログインするたびに特定のエントリが自動的にreportsというモデルに挿入されます。私の工夫セッション制御装置においてRails - 自動フォームフォームをDeviseのログイン、未定義のメソッド `permit '

、私持って成功したユーザのログインに関連する次のアクション:それははっきりしていない場合

def create 
    self.resource = warden.authenticate!(auth_options) 
    sign_in(resource_name, resource) 
    yield resource if block_given? 
    respond_with resource, location: after_sign_in_path_for(resource) 
end 

def after_sign_in_path_for(resource) 
    Report.create(report_params({"comment" => "user logged in"})) 
end 

private 
    def report_params(params) 
     params.permit(:comment) 
    end 

そう、私は何を意味するreportsたびに新しいエントリを作成することですユーザーがログインし、そのエントリには常に「ユーザーがログインしました」と表示されます。私はこれを実行しようとすると

はしかし、私は次のエラーを取得する:

undefined method `permit' for {"comment"=>"user logged in"}:Hash 

私はこの正確な操作が少し無意味または冗長に見えるかもしれませんことを実現 - 私はちょうど実験よ、言ったように、しかし、この権利を得ることは、私が取り組んでいる別のアプリケーションを再構成するのに役立ちます(この固定エントリの代わりにJSONについて考える)。

誰かがこのエラーの意味を説明し、私が間違っていることを理解するのに役立つ場合(または、これがこのようなタスクを達成する最善の方法である場合)、それは高く評価されます。

答えて

1

あなたは、これは単なるリソースが認証されるとすぐにすべての単一sign_in後に作成された新しいレポートがあるでしょう、あなたの行動

def create 
    self.resource = warden.authenticate!(auth_options) 
    Report.create(comment: "user logged in") 
    sign_in(resource_name, resource) 
    yield resource if block_given? 
    respond_with resource, location: after_sign_in_path_for(resource) 
end 

だから、お尻を作成するには、これを追加する必要はありません。あなたがもっと必要な場合は下記のコメント

1

@Chirag Aryaがあなたのために働くはずです。私はエラーを説明することに焦点を当てます。

undefined method `permit' for {"comment"=>"user logged in"}:Hash

問題がActionController::Parametersに呼び出されなければなりませんpermitですが、あなたはハッシュでそれを呼び出しています。 report_paramsメソッドでは、通常のparamsをハッシュ({"comment"=>"user logged in"})で上書きしていることに注意してください。

h = {"comment"=>"user logged in"} 
=> {"comment"=>"user logged in"} 

h.permit 
NoMethodError: undefined method `permit' for {"comment"=>"user logged in"}:Hash 

a = ActionController::Parameters.new({"comment"=>"user logged in"}) 
=> {"comment"=>"user logged in"} 

a.permit(:comment) 
=> {"comment"=>"user logged in"} 

また、私はあなたが間違ってafter_sign_in_path_for(resource)、サーバに異なる目的を意味する工夫ヘルパーメソッドを使用してあることに気づきました。 See why this method is used

関連する問題