0

この質問がここで回答されているのを見ましたが、残念ながら回答は機能しません。参考までに、これは Rails 2.3.11 アプリケーションです。

RESTful リソースに対してこの link_to ヘルパーを使用して create を呼び出したい:

link_to("Add", part_types_path(myid), :method => :post)

非常に奇妙なことに、私が URL ヘルパーに渡す ID は、Rails アプリケーションによって「フォーマット」として解釈されています。したがって、リンクは次のようになります。

/part_types.12345

「12345」は ID です。クレイジー!

確かに非常に基本的なものが欠けていますが、Rails がオブジェクト ID をフォーマットと呼ぼうとするのを見たことがありません。

ルートエントリは次のとおりです。

map.resources :part_types, :collection => { :part_list => :get }

これが「rake routes」の結果です

POST   /part_types(.:format)    {:controller=>"part_types", :action=>"create"}

あらゆる種類の ID がないことに注意してください。

4

1 に答える 1

1

名前の付いたルートは、メソッドが の場合はアクションpart_typesを参照し、メソッドが の場合はアクションを参照します。これらのアクションのどちらも、パラメータ化されたパスを持っていません (どちらが のようになるのとは対照的です)。は、新しいレコードを作成してその ID を返すことになっています。サーバー上で一意の ID を生成する方が簡単なため、通常はリクエストでそれらを渡しません。indexGETcreatePOSTshow/part_types/:idcreate

ルートはパラメーターを取らないため、最初の引数は形式として解釈されます。これを次と比較してください。

  • part_type_path(1)戻るべき/part_types/1
  • part_type_path(1, :json)返すべき/part/types/1.jsonです。

actionpack /lib/action_dispatch/routing/mapper.rbをチェックして、どのようresourcesに定義されているかを確認してください。

于 2012-07-26T06:30:20.170 に答える