應用Rails進行REST 開發 四

2021-08-29 19:15:15 字數 2702 閱讀 8542

controller 裡的url 方法

在view中,我們已經使用了一些新的helper 方法(也就是path方法)來生成了rest風格的url,那麼controller 自然也需要一些新的東西來處理redirect 等請求。在controller中,我們使用「url」helper 方法,來生成正確的rest風格的url。

project_url 對應 project_path

projects_url 對應 projects_path

和 「path」 方法向對比,「url」 方法生成了乙個完整的url位址,包括協議,主機,埠,以及路徑。

在rails 應用的controller裡,」url」 方法用在redirect_to 方法裡,取代傳統的 controller/action 的方式。

redirect_to :controller => "projects", :action => "show",:id => @project.id

在rest應用中應該這麼寫:

redirect_to project_url(@project)

對於這一點,你可以把 destroy action 作為乙個例子去看看:在乙個資源被刪除以後,使用 project_url 去顯示全部的資源,而不是像以往一樣使用controller,action 作為引數。

rest 風格的路由

到目前為止,我們介紹了rest的內容,以及在 鏈結,form,controller中所適用的一些新的helper方法。但是我們沒有解釋那些helper方法是從哪來的?決定那些方法存在的,以及 指定那些方法會呼叫哪個controller的哪個action,就是乙個檔案,那就是 /config/routes.rb。

map.resources :projects

這個配置是由我們上面適用 scaffold 生成器生成的。生成器生成了乙個路由,當處理請求時,controller 需要這個路由才能知道呼叫哪個action。此外,resources 生成了path 和 url 的helper方法去操作「project」這個資源。

projects projects_url, projects_path

project project_url(id), project_path(id)

new_project new_project_url, new_project_path

edit_project edit_project_url(id), edit_project_path(id)

習慣

要進行rest風格的開發,就必須遵循rest方式的命名習慣,多針對 crud四個操作而言。下面的link_to 將會產生如下的html:

link_to "show", project_path(project)

=>

show

不管是link_to 方法中,還是生成的html中,都沒有去指定要呼叫的action,rails 會知道,如果使用get方式來呼叫這個url,那麼就是去呼叫show這個action。因此,controller裡就必須有乙個名字為「show」的 action。對於index, update, delete,create, destroy,new,edit,也都是相同的習慣,所以,每乙個rest的controller 都必須實現這幾個方法。

定製路由

:controller. 指定使用哪乙個controller

:path prefix. 生成的url的字首。

:name prefix. helper方法的字首。包括 url方法和path方法。

:singular. 對於乙個路由,命名乙個唯一的名字。

下面的例子建立了乙個路由,用於新建乙個sprint資源,sprint的資訊我們會在下面的章節中介紹。

map.resources :sprints,

:controller => "ontrack",

:path_prefix => "/ontrack/:project_id",

:name_prefix => "ontrack_"

在這個url中,我們適用了 :path_prefix,意味著每乙個url都必須以/ontrack/+project id 開始,對應的controller 應該是 ontrackcontroller。因此這個url http://localhost:3000/ontrack/1/sprints 根據路由的規

則,會呼叫 ontrackcontroller的index 方法,而這個url「http://localhost:3000/ontrack/1/sprints/1

」則會呼叫 show 方法。:path_prefix 定製了url的格式,那麼 :name_prefix 則會修改helper的方法的名字:

ontrack_sprints_path(1)

=>

/ontrack/1/sprints

orontrack_edit_sprint_path(1, 1)

=>

/ontrack/1/sprints/1/edit

好了,今天就說到這,下章我們來說說巢狀資源的rest風格。

《應用Rails進行敏捷Web開發》樣章試讀

這是第一本關於 ruby on rails 的著作。除了上述兩部分之外,對rails缺乏了解的讀者應該首先閱讀 起步 部分,通過乙個最簡單的示例應用感性了解這個時下熱門的web框架。不熟悉ruby的讀者應該閱讀 附錄 部分中的 ruby簡介 以便了解ruby的基本語法與常見用法。整體而言,全書既有直...

讀《應用rails進行敏捷web開發》第2版 2

對資料的驗證應該放在模型層model,因為在模型層控制,可以不管是是來自控制器還是其他型別的資料更改請求,都可以被截獲並進行驗證。在控制器中使用scaffold product 可以生成動態腳手架 而是用generate scaffold product admin就生成靜態腳手架 product....

Rails應用部署

伺服器配置 patch 1手動部署 etc nginx sites enable 下建立配置檔案blog.conf gemfile裡加上gem puma puma e production b unix tmp blog.sock dps 注意nginx配置裡的public資料夾路徑問題,之前路徑寫...