通过插件访问Redmine控制器

41

我已经在Redmine官方网站上提出了这个问题,但是没有得到任何答案,也许在这里我会有更多的机会。

我正在开发一个项目,并尝试通过向现有的Redmine插件添加功能来改进它,以便用户可以使用简单的表单将其Dropbox文件上传到Redmine文档中。 Redmine已经具备了这种可能性,因此我想使用已在Redmine源代码中定义的控制器和方法。

我在我的一个插件视图中有以下代码:

<% html_title "Reddrop - Sync" %>
<h2>Synchronisation page</h2>
<p>Please choose your file</p>
<%= form_tag({:controller => "documents", :action => "add_attachment", :id => @document},    :multipart => true) do %>
<%= file_field_tag 'attachments[dummy][file]', :id => nil, :multiple => true, :onchange => "addInputFiles(this)" %>
<%= submit_tag(value = "Sync this file with Redmine") %>
<% end %>

我正在调用 Redmine 源代码中定义的 "documents" 控制器和 add_attachment 方法。当我提交表单时,出现以下错误:

ActionController::RoutingError (No route matches {:controller=>"documents", :action=>"add_attachment", :id=>nil}):

如果这些控制器/方法在Redmine源代码中定义,是否可以通过插件调用它们?

如果是的话,您能否提供一些配置路由的建议?


4
你的 @document 实例变量是 nil。你该如何设置它? - Marek Lipka
嗯,代码中可能有一些错误,因为我无法尝试它。我现在无法精确回答你,让我检查完整的代码。 - Shredator
1
由于这并不是一个真正的答案,我想我只需链接到我之前编写的一个插件,该插件使用Dropbox作为Redmine的文件存储后端。https://github.com/alexbevi/redmine_dropbox_attachments。没有更多上下文,提供适当答案有点困难。如果您在Github上有一个分支,可以指向它以便我们测试,这可能会更容易回答这个问题。 - Alex B.
我找到了另一种上传文件的方法,而且效果很好,但还是谢谢你提供的链接,我一定会去看看的。 - Shredator
4
可能控制器被命名空间化了,你可以尝试运行 rake routes 命令并查看路由的名称以及是否存在命名空间。 - Mohammad AbuShady
基本上,您需要在项目中使用与原始文件相同的路径重新创建 documents_controller.rb。我也这样做来覆盖 doorkeeper 的控制器。如果路径不完全相同,则会出现“无路由匹配”错误。 - brcebn
2个回答

1

看这里::id => @document
@document 是包含 nil 的变量,但是它应该包含一些所需记录的 id(如1、2或其他)。检查您的控制器,一旦解决了此问题,这个错误肯定会被解决。


0

验证路由格式     rake | rails route

发送所需参数和正确的命名空间。 如果您已经有一个@document,则可以使用form_for。

`<% form_for(@document, url: {action:'add_attachment'} ) do %> `

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接