我尝试从视图中链接到控制器中的操作。当我耙路线时,我看到了
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
。如何制作符合下载方法的路线,并在我的视图中点击链接进行调用?
答案 0 :(得分:3)
该路线需要:document_version_id
参数,因此您无法像这样直接调用它。使用该路线的方法是:
document_version_file_index_path(@document_version_file)
我不确定为什么路线名称中有index
,通常是自动生成的路线“
记住这些路由如何工作的简单方法是路径中的每个:x
类型参数不是可选的,而不是在括号内,您按顺序为调用中的值提供值出现。
/:a/:b.(:c)
的路由可以被称为x(a,b)
或x(a,b,c)
,两种方式都有效,因为:c
是可选的。
答案 1 :(得分:1)
我的问题是,我正在混淆两个目标:建立一条路线来击中我的控制器动作,以及建立我的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]) %>
我的控制器在下载操作中与法拉第进行api通话。
答案 2 :(得分:0)
只需使用
[
{
"NOMBRE": "TEST",
"ESPECIALIDAD": "TEST",
"ESPECIALIDAD2": "TEST PEDIATRICA",
"ESPECIALIDAD3": "",
"CEL": "2222009374947478474777",
etc.....
}, {
"NOMBRE": "TEST",
etc.....
}
]
其中<%= link_to linkText, :document_version_file_index_path(@document_version_file) %>
是您要查看所有文件的文档版本。
编辑: 这会将路线作为例外。
@document_version_file