首页 > 解决方案 > 为 HTTP Verb PATCH 生成的实际 URL Rails 是什么?

问题描述

新手请多包涵。我了解 Rails 如何为简单的 URL 链接(如localhost:3000/rooms/11/listing. 格式很简单,如 Routes 表中所述。但是,当涉及到 PATCH、PUT、DELETE 和 CREATE 时,我感到很困惑。例如,当我单击“保存”按钮时,下面的输出带有参数。我的问题是,当我单击 SAVE 按钮时,Rails 生成的实际 URL 是什么?

Started PATCH "/rooms/11" for 127.0.0.1 at 2019-08-20 05:25:32 +0800
(0.8ms)  SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
  ↳ /usr/local/rvm/gems/ruby-2.6.0/gems/activerecord-5.2.2/lib/active_record/log_subscriber.rb:98
Processing by RoomsController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"JHiCJ6HoTsgd8SGgLTFiZ9+J9hS9U8hHGvjKf4Lz3uieQ8OO2eFqFEM/D5xocHp/Nd3eA0az9k+okrmNe65BYg==", "room"=>{"home_type"=>"Apartment", "room_type"=>"Private", "accommodate"=>"3", "bed_room"=>"4", "bath_room"=>"3"}, "commit"=>"Save", "id"=>"11"}

我从控制台知道

app.room_path(11)
 => "/rooms/11" 

这是 Rails 生成的 URLlocalhost:3000/rooms/11{"utf8"=>"✓", "authenticity_token"=>"JHiCJ6HoTsgd8SGgLTFiZ9+J9hS9U8hHGvjKf4Lz3uieQ8OO2eFqFEM/D5xocHp/Nd3eA0az9k+okrmNe65BYg==", "room"=>{"home_type"=>"Apartment", "room_type"=>"Private", "accommodate"=>"3", "bed_room"=>"4", "bath_room"=>"3"}, "commit"=>"Save", "id"=>"11"}吗?

标签: ruby-on-railsrubyrack

解决方案


不,生成的 URLapp.room_path(11)http://localhost:3000/rooms/11.

PATCH、PUT、DELETE 和 POST 称为 HTTP 动词。CREATE 不是 HTTP 动词。

这些动词之一伴随您的请求,Rails Router 使用它将请求路由到正确的控制器和操作。

请求可以有参数,就像你在这里展示的那样: {"utf8"=>"✓", "authenticity_token"=>"JHiCJ6HoTsgd8SGgLTFiZ9+J9hS9U8hHGvjKf4Lz3uieQ8OO2eFqFEM/D5xocHp/Nd3eA0az9k+okrmNe65BYg==", "room"=>{"home_type"=>"Apartment", "room_type"=>"Private", "accommodate"=>"3", "bed_room"=>"4", "bath_room"=>"3"}, "commit"=>"Save", "id"=>"11"}

当您单击“保存”按钮时,您的浏览器http://localhost:3000/rooms/11 使用 HTTP 动词 POST 请求。参数被编码在请求的正文中。

了解更多信息的好地方是Rails 路由指南


推荐阅读