URL路由
当添加一条新的路由资源到routes.rb
中:1
2resources testapp
resource testapp2
那么rails会生成如下7中url1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18[root@hadoop0 config]# rake routes
...
testapp_index GET /testapp(.:format) testapp#index
POST /testapp(.:format) testapp#create
new_testapp GET /testapp/new(.:format) testapp#new
edit_testapp GET /testapp/:id/edit(.:format) testapp#edit
testapp GET /testapp/:id(.:format) testapp#show
PATCH /testapp/:id(.:format) testapp#update
PUT /testapp/:id(.:format) testapp#update
DELETE /testapp/:id(.:format) testapp#destroy
testapp2 POST /testapp2(.:format) testapp2s#create
new_testapp2 GET /testapp2/new(.:format) testapp2s#new
edit_testapp2 GET /testapp2/edit(.:format) testapp2s#edit
GET /testapp2(.:format) testapp2s#show
PATCH /testapp2(.:format) testapp2s#update
PUT /testapp2(.:format) testapp2s#update
DELETE /testapp2(.:format) testapp2s#destroy
上述表格中的左侧一列是可以在views
中或者controller
中使用引用url的助记符,例如可以使用redirect testapp2_path
代表重定向到/testapp2
这个url上。 后面的testapp2s#create
代表的是哪个控制器的那个函数被调到处理该时间,在这个例子上就是testapp2s
的create
方法来处理GET
请求。
可以使用except
和only
来排除哪些action和保留哪些action,例如:1
2resources :testapp, :only => [:index, :show]
resource :testapp2, :except => :destroy
如果在构建的url中存在多个id的情况,可以使用param来制定id的名称,例如1
2
3
4
5resources :task do
member do
resources :detail
end
end
会生成 /task/:id/detail/:id
的URL但是在controller进行url渲染的时候,不能生成正确的url信息,所以这个路由信息需要如下改动1
2
3
4
5resources :task ,param: :task_id do
member do
resources :detail, param: :detail_id
end
end
这次,将会生成/task/:task_id/detail/:detail_id
这样的url,这样在controller进行渲染的时候可以渲染出正确url
PUT vs POST
在HTTP中POST
意味着创建一个新的对象,而PUT
意味着是更新该对象操作。
由于web的form中的submit按钮会自动使用POST
方法来推送消息,但是在实际场景中,form的数据可能是更新的情况,不应该使用POST
消息,而是使用PUT
消息,但是在form中的method即使修改为PUT
后,浏览器自动忽略该行为,并自动修改为GET
请求。
浏览器已经考虑了上述情况,做了工程实践上的妥协,添加如下标签后,该form的推送方法将使用PUT
方式:1
<input type='hidden' name='_method' value='PUT'>
或者是slim的代码1
=f.text_field :name, type: 'hidden', name: '_method', value:'PUT'