簡體   English   中英

用戶定義的路由

[英]User-defined routing

我有三個相關的模型:公司,項目和鏈接,並且我試圖創建一個系統,在該系統中我們根據它們創建的鏈接生成路線,例如:

www.site.com/the_company's_specific_path/one_of_company's_links

一家公司has_many:projects,一個項目has_many:links。

結構摘要:

#Company table
company.id
company.path # such as 'Bechtel'

#Project table
project.id
project.company_id

#Link table
link.id
link.link # such as 'railwayproject'
link.project_id
link.company_id # some links may be tied to the company and not one specific project

#Final route generated: www.site.com/bechtel/railwayproject

如何設置此系統,以便:

  • 路線的第1部分指定company.path(沿@company = Company.find_by_path(params[:path])
  • 第2部分查找鏈接(沿@link = Link.find_by_link_and_company_id(params[:link],@company.id)
  • 輸入此URI / URL后,用戶將輸入“顯示”,從中可以看到有關項目或公司的信息。 (當鏈接未專門鏈接到項目時,我們將顯示“列表”,以顯示公司的所有項目。)

如果上述原因不清楚,我們深表歉意。 我已經盡力解釋了! 謝謝。

您應該查看用於RESTful路由的ActionController :: RoutingActionController :: Resources文檔,以及有關該主題的便捷Rails指南 關於路線,也有許多Railscasts。

諸如map.connect :path/:link, :controller => :companies這樣簡單的方法就可以使用,但是根據您現有的路由,它可能會導致一些問題,並且不是RESTful的。 如果它不會引起任何沖突,那么這將使您可以執行所要求的操作。

您可以使用:requirements選項將約束添加到路由,以縮小被認為是匹配項的范圍:

map.company_link :company/:link, :requirements => { :company => /[\w\-]+/, :link => /[\w\-]+/ }

這只會匹配網址中的單詞和破折號('-')字符,我相信默認路由仍將正常工作。 我還使用map.company_link將其命名為路線,因此Rails創建了一組URL幫助器,可輕松引用您的路線: company_link_path(:company => "Bechtel", :link => "railwayproject")

如果您要堅持使用REST的方式,那就是:

map.resource :companies do |company|
  company.resources :links
end

/companies/1/links/2將被傳遞給使用公司和鏈接ID作為參數的links_controller的show動作。 前面提到的《 Rails指南》的“ 嵌套資源”部分對此做了進一步說明。 通常,您將使用:shallow => true選項,因為鏈接ID 2已經是唯一的,並且不需要嵌套在公司下。 嵌套路由的真正價值在於顯示所有帶有/companies/1/links以及所有直接進入各個鏈接/links/2其他動作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM