2016-05-07 9 views
0

基本的な質問は申し訳ありませんが、私はRailsを初めて熟読し、既存のアプリケーションをデバッグしようとしています。RailsのURLパラメータについて理解しています

def find_by_foo 
    params.require(:foo).permit(:bar1, :bar2) 
end 

ルートは次のとおりです。:

get 'find_by_foo', on: :collection 

そして、私もスペックを持っている:

具体的には、私が与えられ、URLをリバースエンジニアリングするには、以下のコントローラをしようとしています

it "should not be successful" do 
    get :find_by_foo, params: {foo: BarStuff} 
    expect(response).to_not be_success 
    expect(response).to have_http_status(401) 
end 

私はRESTクライアント経由でこれらのパラメータを渡す方法を理解しようとしています。私は次のURL構造を試しました:

api/v1/collections/find_by_foo?foo={bar1: 0, bar2: 0} 
api/v1/collections/find_by_foo/foo/0/0 
api/v1/collections/find_by_foo?params={foo: {bar1: 0, bar2: 0}} 

これまでのところすべて利用可能です。ここで正しい構造は何ですか?

答えて

3

このような意味ですか?

api/v1/collections/find_by_foo?foo[bar1]=0&foo[bar2]=0 

これの概要がActionController Overview

で提供されていますまた、コンソールでは、

app.find_by_foo_api_v1_collections_path(foo:{ bar1: 0, bar2: 0}) 

(または実際のURLヘルパーメソッドが何であれ、私はちょうどを呼び出すことができますパスに基づいた推測)、使用できるパスのCGIエスケープバージョンを取得します。あなたは簡単に読むためにCGI.unescape(...)にそれをラップすることができます。たとえば、私のアプリでは:

2.2.2 > CGI.unescape(app.edit_many_ops_media_files_path(foo:{ bar1: 0, bar2: 0})) 
# => "/files/edit_many?foo[bar1]=0&foo[bar2]=0" 
0

適切な構造を確認するには、find_by_fooで経路とフィルタを印刷することができます。ターミナルでこれを実行してください:

$ rake routes | grep find_by_foo 

希望します。

+0

ありがとう。はい、しかし、それは私にパラメータの形式を教えていません。 '/api/v1/foos/find_by_foo(.:format)api/v1/foos#find_by_foo' – JB2

+0

このURLにアクセスするとAPIを打つことができます: 'localhost:3000/api/v1/foos/find_by_foo '、formatは.js、.html、.xml、.jsonになります。これは' FoosController'の 'find_by_foo'メソッドの実装に依存します。 – juanitofatas

+1

ありがとう、juanitofatas。 JSONになります。 – JB2

関連する問題