[英]Rails link_to existing route
我正在嘗試從視圖鏈接到控制器中的操作。 當我耙路線時,我看到
document_version_file_index GET /document_versions/:document_version_id/file(.:format) file#index
我想這就是我要打的路線。 我的控制器稱為document_versions_controller,它包含一個我要調用的名為download的操作。 當我嘗試
<%= link_to linkText, :document_version_file %>
我收到路由錯誤:
No route matches {:action=>"show", :controller=>"files"}
沒有文件控制器。 我正在嘗試點擊document_version控制器。 我究竟做錯了什么?
編輯:我如何建立我的路線:
resources :document_versions do
resources :files
member do
get 'download', :action => :download
resources :document_version
end
end
編輯2:我們可以退后一步,假裝我沒有路線嗎? 我有一個視圖和一個控制器。 該控制器具有def download
,名為document_versions_controller.rb
並且具有class DocumentVersionsController < ApplicationController
。 如何在我的視圖中建立一條點擊該下載方法並點擊鏈接的路由?
該路由需要一個:document_version_id
參數,因此您不能像這樣直接調用它。 使用該路由的方式為:
document_version_file_index_path(@document_version_file)
我不確定為什么該路由在名稱中具有index
,而通常自動生成的路由卻沒有。
記住那些路由如何工作的簡單方法是針對路徑中的每個:x
類型參數,該參數不是可選的,而不是放在方括號中,您可以按調用的出現順序為其提供值。
到/:a/:b.(:c)
的路由可以稱為x(a,b)
或x(a,b,c)
,這兩種方法都有效,因為:c
是可選的。
我的問題是我將兩個目標混為一談:構建一個路由來執行控制器操作,以及構建我的api調用網址。 api URL(包括file
和version_id
)是在控制器操作中構建的,嘗試構建與api url相匹配的路由是不正確的。 我修改了routes.rb,現在看起來像這樣:
resources :document_versions do
member do
get 'download', :action => :download
end
end
我在視圖中的link_to看起來像這樣:
<%= link_to linkText, download_api_document_versions_path(:version_id => version.document_version[:id]) %>
然后我的控制器在下載操作中與Faraday進行了api調用。
只需使用
<%= link_to linkText, :document_version_file_index_path(@document_version_file) %>
其中@document_version_file
是要查看其所有文件的文檔版本。
編輯:這將給您例外的路線。
get 'document_versions/:document_version_id/files' => 'document_versions#index', as: : document_version_files
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.