簡體   English   中英

Rails link_到現有路線

[英]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(包括fileversion_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.

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