dot*_*ner 4 ruby-on-rails rails-routing
我是Rails的新手,并且一直在学习教程。
我一直在摆弄route.rb,现在对它什么时候寻找show方法以及什么时候寻找索引方法(如果没有明确提及)完全感到困惑。
小智 6
index 和 show 都是 GET 方法,但不同的是,index 是集合类型,show 是成员类型。这意味着index不需要url中的任何参数,但show需要url中的id参数。
EX:
Index: /posts
Show: /posts/:id
Run Code Online (Sandbox Code Playgroud)
Rails 选择了convention over configuration. 这就是为什么这些操作没有明确命名。
以下是给定控制器的预期操作的完整列表:http://edgeguides.rubyonrails.org/routing.html#crud-verbs-and-actions
路线就像类固醇上的正则表达式一样。它们具有定义顺序的优先级,并且与请求方法,URI和您添加的任何其他约束匹配。
get '/posts', to: 'posts#index'
get '/posts/:id', to: 'posts#show'
Run Code Online (Sandbox Code Playgroud)
与上述路由的主要区别在于,请求uri的路径必须匹配的正则表达式不同。'/posts/:id'包含匹配的命名段:
GET /posts/11
GET /posts/gobligook
Run Code Online (Sandbox Code Playgroud)
但不是:
GET /posts
GET /posts/1/foo
GET /posts/foo/bar
Run Code Online (Sandbox Code Playgroud)
完整的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
Run Code Online (Sandbox Code Playgroud)
在Rails风格的REST中,操作是从路径和方法隐式派生的。实际上,仅用于渲染表单
的new和edit方法在路径中显式添加了操作-这是因为它们作用于集合或集合的成员。
请注意,'/posts/new'必须先声明路由,get '/posts/:id'否则显示路由将首先与请求匹配(路由按照定义的顺序具有优先级)。这不适用get '/posts/:id/edit'于此模式,因为模式不同。
当然,输入所有这些路线确实很繁琐,因此rails提供了可以为您完成此操作的resources宏:
resources :posts
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5668 次 |
| 最近记录: |