0

私はRESTfulデザインに不慣れで、混乱しています。同じリソース(たとえば、/ weblogs / myweblog)に対してPUT、GET、またはPOSTを作成する場合、route.rbおよび関連するコントローラーにどのように書き込む必要がありますか?以下は動作しますか?route.rb内

match 'weblogs/myweblog/new' => 'weblogs#create_new_blog'
match 'weblogs/myweblog/edit/:id' => 'weblogs#edit_blog' 
.
.

weblogs_controller.rbで

def create_new_blog
   ...
end

def edit_blog
  params[:id]..
  ....
end

同じリソースでGET/PUT / POSTを実行したい場合、URLは同じであるが、HTTPリクエストのみが異なる場合、コントローラーで異なる操作を作成するにはどうすればよいですか?

4

1 に答える 1

1

一般に、リソースの観点からルートを定義するのが最善です。したがって、という名前のリソースがある場合webblog、ルートは次のように定義できます。

resources :weblogs

これによって生成されたルートを(で)チェックすると、、、、およびURLのアクションからコントローラーアクションへrake routesのマッピングの標準セットが定義されていることがわかります。GETPUTPOSTDELETE

   webblogs GET    /weblogs(.:format)         weblogs#index
            POST   /weblogs(.:format)         weblogs#create
new_webblog GET    /weblogs/new(.:format)     weblogs#new
    webblog GET    /weblogs/:id(.:format)     weblogs#show
            PUT    /weblogs/:id(.:format)     weblogs#update
            DELETE /weblogs/:id(.:format)     weblogs#destroy

これらのルートは、標準のコントローラーアクション、、、、などにマップさindexcreateます。newshow

何らかの理由で、を使用せずresourcesにルートを定義する場合は、ルートを個別に定義できます。

get '/weblogs' => 'weblogs#index'
get '/weblogs/new' => 'weblogs#new'
get '/weblogs/:id/edit' => 'weblogs#edit'
put '/weblogs/:id' => 'weblogs#update'
...

getなどでルートを定義することによりput、単一のURLを複数のコントローラーアクションにマップできます。たとえば、次のようになります。

get '/weblogs/myweblog' => 'weblogs#show_myweblog'
put '/weblogs/myweblog' => 'weblogs#update_myweblog'
post '/weblogs/myweblog' => 'weblogs#create_myweblog'
destroy '/weblogs/myweblog' => 'weblogs#destroymy_weblog'

これにより、URL / weblogs / myweblogがshow_myweblog、GETリクエスト、update_myweblogPUTリクエスト、create_myweblogPOSTリクエスト、およびdestroy_myweblogDELETEリクエストのメソッドにマップされます。

または、標準を使用して、オプションを使用resourcesしてフルセットから必要なルートを選択できます。only

resources :weblogs, only: [:show, :edit]

詳細については、ドキュメントを参照してください。これがあなたの質問に答えることを願っています。そうでない場合は、コメントであなたがやりたいことの詳細を提供してください。

于 2012-11-01T23:26:33.957 に答える