4
4

More than 5 years have passed since last update.

Rails: routes.rbのmatch+viaで任意のHTTPメソッドを受け取る

Posted at

RailsはRESTの理想を追求してDELETE, PUTなどのメソッドを選択できる。path生成時に

<%= link_to "ログアウト", destroy_user_session_path, :method => :delete %>

などとできる。ところがこのとき

config/routes.rb
devise_scope :user do
  get 'sign_out', :to => 'users/sessions#destroy', :as => :destroy_user_session
end

としていると、 No route matches [DELETE] "/sign_out" と言われてしまう。これは"get"と、HTTPメソッドを最初に指定してしまっているためだ。
そこでメソッドにかかわらずマッチする"match"を使う。

config/routes.rb
devise_scope :user do
  match 'sign_out', :to => 'users/sessions#destroy', :as => :destroy_user_session, :via => [:get, :delete]
end

viaでメソッドを指定してやる。この使い方は、こういった具合に

match "/subscription" => 'subscribe#verify', :via => [:get,:post]

同じパスでGET/POST両方受け付ける時にも利用できる。上記はFacebook real-time update APIのendpointをこちらのRailsアプリに用意する時の例である。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4