1

声明

在庫アプリがあると想像してください。Movementモデルがあり、商品の購入や販売などの動きを表しています。したがって、デフォルトのRESTルートがあります。

    movements GET    /movements(.:format)          {:action=>"index", :controller=>"movements"}
              POST   /movements(.:format)          {:action=>"create", :controller=>"movements"}
 new_movement GET    /movements/new(.:format)      {:action=>"new", :controller=>"movements"}
edit_movement GET    /movements/:id/edit(.:format) {:action=>"edit", :controller=>"movements"}
     movement GET    /movements/:id(.:format)      {:action=>"show", :controller=>"movements"}
              PUT    /movements/:id(.:format)      {:action=>"update", :controller=>"movements"}
              DELETE /movements/:id(.:format)      {:action=>"destroy", :controller=>"movements"}

ニーモニックプロポーザルの場合、次のような説明的なルートが必要です。

 new_purchase        /purchase/new(.:format)       {:controller=>"movements", :action=>"new_purchase"}
edit_purchase        /purchase/:id/edit(.:format)  {:controller=>"movements", :action=>"edit_purchase"}

purchase'sが'sと同じモデルmovementであり、実際にはによって処理されていることがわかりますがMovementsController、フローと処理が異なります。これは、create_purchaseの代わりにで指定されますcreate

質問

  1. の安らかなルートを追加するにはどうすればよいpurchaseですか?、、、などGETのHTTPメソッドの指定に注意してください。POSTPUTDELETE

  2. form_forタグはどのように書くべきですか?movementモデルを使用して書くことができます:しかし、またはメソッドのパス<%= form_for(@movement) do |f| %>を呼び出すにはどうすればよいですか?purchasecreateupdate

  3. の検証ルールをどのように指定する必要がありますpurchaseか?モデルにいくつかのルールを指定しましたが、フォームが送信されたときにMovementそれらは適用されません。purchase

4

2 に答える 2

1

ルートファイルでこのようなものを使用できます

 match '/purchase/new(.:format)' => 'movements#new_purchase'     :via => :get
 match '/purchase/:id/edit(.:format)' => 'movements#edit_purchase' :via => :post 

そして、あなたは削除のような他の人に言及することができます、:viaに入れてください

詳細については、このリンクを参照して ください。createをcreate_purchasesに変更する場合は、movementsコントローラーに移動して定義名を変更してください。

2番目の質問では、次のようなことができます

form_tag(:controller => "controller_name", :action => "action_name", :method => "get")
于 2012-07-23T02:08:25.913 に答える
1

2つの別々の方法でオブジェクトを処理するモデルのルートをRESTfulに構築する方法を探すべきではないと思います。それはあなたが本当に2つのオブジェクトを探しているように私には聞こえます。Purchase親モデルからプロパティを継承するモデルを作成できますMovement

または、それらが同じオブジェクトであると想定し、意味のあるセマンティックパスを使用して同じ方法で処理することもできます。そうは言っても、あなたが探しているのは、MovementコントローラーアクションのデフォルトのRESTfulルートのパス変更かもしれません。また、一般的なRailsの規則では、複数のパスルートを使用します。これは、インデックスページに意味を持ち、データベース内のオブジェクトのテーブルのサブセットであるオブジェクトを識別するため、のpurchases代わりにを使用していますpurchase

resources :movements, :path => "/purchases"

を生成します

    movements GET    /purchases(.:format)          {:action=>"index", :controller=>"movements"}
              POST   /purchases(.:format)          {:action=>"create", :controller=>"movements"}
 new_movement GET    /purchases/new(.:format)      {:action=>"new", :controller=>"movements"}
edit_movement GET    /purchases/:id/edit(.:format) {:action=>"edit", :controller=>"movements"}
     movement GET    /purchases/:id(.:format)      {:action=>"show", :controller=>"movements"}
              PUT    /purchases/:id(.:format)      {:action=>"update", :controller=>"movements"}
              DELETE /purchases/:id(.:format)      {:action=>"destroy", :controller=>"movements"}

このモデルを使用すると、form_forヘルパーメソッドを通常どおりに使用できます。@movement適切に定義されていると仮定すると、purchasesルートを持つパスが適切に呼び出されます。

于 2012-07-23T04:21:22.217 に答える