我是Rails的新手,我一直在关注教程。
我一直在摆弄routes.rb,现在完全混淆了它何时查找show方法以及何时为index方法(如果没有明确提到的话)?
答案 0 :(得分:4)
路线就像类固醇的正则表达式一样。它们按照定义的顺序具有优先级,并与请求方法,URI和您添加的任何其他约束相匹配。
get '/posts', to: 'posts#index'
get '/posts/:id', to: 'posts#show'
上述路由的主要区别在于请求uri的路径必须匹配的正则表达式是不同的。 '/posts/:id'
包含一个匹配的命名段:
GET /posts/11
GET /posts/gobligook
但不是:
GET /posts
GET /posts/1/foo
GET /posts/foo/bar
完整的传统CRUD动词集是:
get '/posts', to: 'posts#index' # all posts
get '/posts/new', to: 'posts#new' # form to create a post
post '/posts', to: 'posts#create' # create a post from a form submission
get '/posts/:id', to: 'posts#show' # show a single post
get '/posts/:id/edit', to: 'posts#edit' # form to edit a post
put '/posts/:id', to: 'posts#update' # for legacy compatibility
patch '/posts/:id', to: 'posts#update' # update a post from a form submission
delete '/posts/:id', to: 'posts#destroy' # delete a post
在Rails风格的REST中,动作是从路径和方法隐式派生的 只有用于呈现表单的新和编辑方法实际上是在路径中明确添加操作 - 这是因为它们作用于集合或集合的成员。
请注意,'/posts/new'
路由必须在get '/posts/:id'
之前声明,或者show route首先与请求匹配(路由按照定义的顺序具有优先级)。这不适用于get '/posts/:id/edit'
,因为模式不同。
当然输入所有这些路线真的很乏味,所以rails提供resources
macro为你做这件事:
resources :posts
答案 1 :(得分:2)
Rails选择convention over configuration
。这就是为什么行动没有明确命名。
以下是给定控制器的预期操作的完整列表:http://edgeguides.rubyonrails.org/routing.html#crud-verbs-and-actions
答案 2 :(得分:1)
index和show都是GET方法,但区别在于索引是集合类型而show是成员类型。这意味着索引不期望url中的任何参数,但show期望url中的id param。
EX:
Index: /posts
Show: /posts/:id