我只是想做一个测试并尝试了解轨道上的路线。这就是我在控制器上的内容:
class ItemsController < ApplicationController
def index
@data = params[:number]
end
end
和 index.html.erb
The number: <%= params[:number] %>
好吧,如果我发了curl http://localhost:3000/?number=100
,我可以在视图中看到:
数字:100
所以,这里一切都是正确的。但是,我想做同样的事情,但是用 POST 动词。因此,当我curl -d "number=100" http://localhost:3000
时,我收到以下错误:
没有路线匹配[POST]&#34; /&#34;
我做了:
def create
render plain: params[:number].inspect
end
查看参数,但正如我之前所说,仅适用于 GET 动词。
所以我的问题:如何通过curl
看到POST发送给控制器的数据,并在我的视图 index.html.erb 上查看结果?
注意:在 routes.rb 上我有:
Rails.application.routes.draw do
#get 'items/index'
resources :items
root 'items#index'
end
备注:根据收到的答案,我还有两个问题:
为什么动词 GET 适用于http://localhost:3000/?number=100
,与http://localhost:3000/items/?number=100
相同?为什么 POST 不会发生同样的情况?
如果用户直接指向{{1>,如何删除消息 无路由匹配[POST]&#34; /&#34; 使用 POST动词?
答案 0 :(得分:1)
您要发布到root_url。而是将您的请求发布到items_url:
curl -d "number=100" http://localhost:3000/items
更新:
为什么动词GET适用于http://localhost:3000/?number=100和。{ 与http://localhost:3000/items/?number=100相同?为什么一样 POST不会发生?
对/?number=100
的GET请求有效,因为您在路由文件中指定了root 'items#index'
。这专门创建了GET
路由,该路由映射到index
控制器的items
操作。
如果用户,如何删除消息无路由匹配[POST]“/” 使用POST动词直接指向http://localhost:3000
您可以使用post
关键字创建单个POST路由:
# routes.rb
root 'items#index'
post '/', to: 'items#create'
会产生路线:
root GET / items#index
POST / items#create
(从您的项目目录运行命令rails routes
)
或者您可以使用resource
方法创建所有CRUD路径:
resources :items, path: '/'
...将创建以下路线:
items GET / items#index
POST / items#create
new_item GET /new(.:format) items#new
edit_item GET /:id/edit(.:format) items#edit
item GET /:id(.:format) items#show
PATCH /:id(.:format) items#update
PUT /:id(.:format) items#update
DELETE /:id(.:format) items#destroy
请注意,如果您尝试向应用添加其他资源,则可能会导致路由冲突。如果需要添加其他资源,请在routes.rb
文件中的这些路由之前添加它们。 Rails从上到下评估路由文件,因此只有在没有其他路径匹配时才会加载这些资源。