2016-10-13 5 views
0

私はレンダリングされているコントローラとアクションに基づいてカスタムJavaScriptイベントを起動するレールマウント可能な宝石を書いています。私はURLからではなく由来のparamsにこれを制限したいセキュリティ上の理由からURLからのみパラメタを取得するにはどうすればよいですか?

// 'PATCH /users/:user_id/tasks/:id' 
$(document).on('tasks#update', function(data, params){ 
    console.log(params['user_id'], params['id']); 
}); 

:私はURLからのparamsは、イベントハンドラに利用できる機能を追加したいと思い

リクエスト本体。

これはライブラリであり、アプリケーションコードではないため、キーマッピングがわからないため、URI.parseを使用することはできません。

ルーターだけに一致するパラメータのサブセットを取得するにはどうすればよいですか?

+0

宝石のソースはhttps://github.com/maxcal/pagescriptです。 – max

+1

'request.env ['action_dispatch.request.path_parameters']'を試してください。残りのクエリ文字列のパラメタ(ルーティングとマッチしないもの)が必要なら 'request_env ['action_dispatch.request.query_parameters']' –

+0

ありがとう@AlexandreAngelim、私は騒音のあなたのコメントを完全に逃したが、それは私を指摘した正しい方向。 – max

答えて

1

コントローラ(またはこの場合はヘルパー)から、request.path_parametersrequest.query_parametersのサブセットを取得できます。

def body_tag(**opts) 
    options = opts.deep_merge(
    data: request.path_parameters.merge(request.query_parameters) 
) 
    if block_given? 
    content_tag(:body, options) { yield } 
    else 
    tag(:body, options, true) 
    end 
end 
関連する問題