必须有一个明显的答案,但我不知所措。
我有一个跟踪网站的Rails应用。无论出于何种原因,localhost:3000 / sites都会导致我的索引页面。但是,localhost:3000 / sites / index会导致我的显示页面。
为什么会这样?
以下是路线档案:
Rails.application.routes.draw do
resources :sites
以下是网站控制器:
class SitesController < ApplicationController
def index
end
def show
end
end
在views / sites中,有index.html.erb和show.html.erb文件。前者显示在/ sites,后者显示在/ sites / index(和/ sites / show一样)。
感谢您的帮助!
更新:
当我耙路线时,我得到:
Prefix Verb URI Pattern Controller#Action
sites GET /sites(.:format) sites#index
POST /sites(.:format) sites#create
new_site GET /sites/new(.:format) sites#new
edit_site GET /sites/:id/edit(.:format) sites#edit
site GET /sites/:id(.:format) sites#show
PATCH /sites/:id(.:format) sites#update
PUT /sites/:id(.:format) sites#update
DELETE /sites/:id(.:format) sites#destroy
这些路线是人们所期望的,但我想我只是惊讶于网站/索引假定索引是:id并因此路由请求显示。
我想我之前从未明确地遇到过这种行为。
答案 0 :(得分:3)
默认情况下,控制器中有7项基本操作,其中只有2项与网址中的名称匹配 - (new
和edit
)。这两个是HTML结构,它们只是一种呈现表单的方式。
另外5个(索引,显示,更新,创建,销毁)是更基本的路由,并且可以显示和修改资源。它们仅由两个 url模式引用(上面提到的两种模式 - 例如'/ sites'和'/ sites /:id')。它们由与请求一起的方法区分:(补丁,发布,获取,删除)。因此,“/ sites”将用于create
和index
。 “/ sites /:id”将用于show
,destroy
和update
。
控制器中的操作未完全由url引用 - url模式和请求方法一起用于调用关联的控制器方法。
在请求“/ sites / index”中,由于字符串“index”在url中,匹配的唯一路由是在“/ sites /”之后具有变量的路由。 :id
只是一个变量,不一定是整数。由于请求是GET,因此第一个(也是唯一的)路由匹配是sites#show
。 “index”将是传递给show动作的params[:id]
的值。
答案 1 :(得分:1)
您的索引页位于:localhost:3000/sites
导航至localhost:3000/rails/info/routes
,以便在开发模式下查看完整的应用路由。
答案 2 :(得分:1)
这是路由在Rails中的工作方式。请查看Rails routing以更好地了解其工作原理。特别是 Rails resource routing部分。
通常,当您设置资源路径时,网址将如下所示:
example.com/sites #=> index page
example.com/sites/:id #=> show page. A specific site, where :id would be the unique identifier
# Here's an example URL with a specific site
example.com/sites/stackoverflow