2016-11-04 13 views
1

私は変数propの値を、thisスレッドの紳士に似た渡されたURLのクエリ文字列で取得しようとしています。URLが存在する場合、抽出URLからクエリ文字列を取得

URLにクエリ文字列がある場合には動作しますが、そうでない場合は CGI.parse undefined method 'split' for nil:NilClassエラーが発生します。私は研究を行いましたが、問題は分割するクエリがないためです。

私の質問はどのようにクエリ文字列の存在をテストし、CGI.parseを通して実行して、propクエリ文字列がそのうちの1つであるかどうかを確認する方法です。私はおそらくRegexを通じてそれを行うことができると仮定しますが、私はRailsソリューションがあることを望んでいました。

ご協力いただければ幸いです。

ありがとう

コード: 私もURLリファラーのドメイン名を取得しようとしています。それが私がそこにその変数を持っている理由です。

url = request.env['HTTP_REFERER'] 
encoded_url = URI.encode(url.to_s) 
parse = URI.parse(encoded_url) 
domain = parse.host 
puts domain 
params = CGI.parse(parse.query) 
puts params['prop'].first 

UPDATE: 私は付属のコードを追加することにより、離れて行くためにエラーが発生しました。しかし、Railsソリューションが優れているかどうかは疑問です。私はまだRailsをかなり新しくしているので、正しく実行していることを確認したい。 URLのクエリ文字列に

if encoded_url.include? "?prop" 
    params = CGI.parse(parse.query) 
    puts params['prop'].first 
end 
+1

本当にあなたはレールチュートリアルを完了しましたか?これは最も基本的なことの一つです。どのリクエストでも、どのHTTP動詞に必要なキーの値を得るためにあなたのコントローラーで使用できる 'params'ハッシュがあるかは関係ありません。 –

+0

ああ、私はparamsハッシュがRails URL内でしかアクセスできないと思った。私はそれが外部URLにも利用可能であったことを知らなかった。私は私と同じようなSOの質問に出くわしたので、それが私にそのことを信じさせた。しかし、それはすべての場合にうまくいくということは理にかなっています。 〜 –

+0

これはあなたのために働いたかどうか、私に教えてください:) –

答えて

2

キーは、URLは、アプリケーション自体の内部に存在しない場合でも、params[]ハッシュを使用してアクセスすることができます。これは、レールが外界と通信するのに便利な方法です。 railsは、params[]ハッシュの使用に関しては、すべてのHTTP動詞を等しく扱うことに注意してください。
用途:puts params[:your_key]

関連する問題