簡體   English   中英

確定路徑是否存在作為 Rails 控制器中的路由

[英]Determine if path exists as route in Rails controller

我想知道是否可以將任意路徑映射到路由

identify_request_for 完成了我想要的,但我無法讓它在我的控制器中工作。

具體來說,我怎樣才能從我的控制器執行recognized_request_for或完成相同任務的東西?

對於 Rails 3,調用是

Rails.application.routes.recognize_path

代替

ActionController::Routing::Routes.recognize_path

例子:

def path_exists?(path)
  Rails.application.routes.recognize_path(path)
  true
rescue ActionController::RoutingError
  false
end

解決方案:

@related_page_path = '/' + @page.path
begin
  ActionController::Routing::Routes.recognize_path(@related_page_path, :method => :get)
rescue
  @related_page_path = nil
end

如果要連接控制器和動作的任意路徑,可以使用map.connect

map.connect '/any/random/string/of/stuff', :controller => 'items', :action => 'new'

您甚至可以在路徑中調用嵌入的參數名稱:

map.connect '/seeking/room/for/[:number_of_nights]/nights', :controller => 'rooms', :action => 'index'

使用上述內容,您將收到 url 中表示的值,作為控制器中params散列的一部分。

您可能會動態生成路由助手方法並查看它是否存在(使用 respond_to? 甚至只是捕獲任何拋出的異常)。

我最近遇到了一個問題,在給定一組可能的路徑的情況下,我必須檢查路徑是否存在。 我已經嘗試了上述建議Rails.application.routes.recognize_path ,但它從rails 4.2.1就已經廢棄了。 我改用以下內容:

Rails.application.routes.named_routes.routes.any?{ |key, value| key.to_s === "new_article" }

暫無
暫無

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

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