0

有一个关于 Rails 的非常基本的问题 - 花了几个小时在互联网上寻找解决方案 - 但找不到解决方案。

我只需要在点击链接时调用一个方法。

这个想法是我需要导出一个由控制器中的方法生成的 xml 文件。

公司控制器.rb(摘录)

.....def xml
    @entries = Entry.find(:all)
    send_data @entries.to_xml,
    :type => 'text/xml; charset=UTF-8;',
    :disposition => "attachment; filename=entries.xml"
end....

我只需要从公司查看页面调用此方法即可下载要下载的 xml 文件,但无法使其正常工作。XML 代码确实有效 - 如果我将它添加到控制器中的 index 方法中,它可以完美运行。

这是我在阅读了一些在线文章后尝试使链接正常工作的一些方法。

<% url = url_for({:action => "xml", :controller => 'firms'}.merge(params)) %>
<%= link_to "XML", url %>

尝试过的最基本的方法

<%= link_to "XML", :action => 'xml' %>

在我看来,这应该是非常简单的事情——但无法让它发挥作用。

我得到的错误:

ActiveRecord::RecordNotFound in FirmsController#show

Couldn't find Firm with ID=xml

Rails.root: /home/james/rails/KPSmart
Application Trace | Framework Trace | Full Trace

app/controllers/firms_controller.rb:25:in `show'

在公司控制器中显示方法

  def show
  @firm = Firm.find(params[:id])
  end

尝试弄乱路线以使其无法正常工作。

谢谢你的帮助

4

3 回答 3

2

试试这个

在路由中将其写在我们为公司控制器编写的资源之上

match 'firms/xml', :controller => 'firms', :action => 'xml',:as => :firms_xml

并以下列方式链接它

<%= link_to "XML", firms_xml_path %>
于 2012-05-22T04:50:28.807 回答
1

这看起来像是路由问题或链接问题。是否需要将 ID 参数传递给 XML 控制器方法?您的示例链接没有显示。您需要查看如何在您的 link_to 助手中传递参数:

http://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to

如果您在 routes.rb 中设置了默认路由:

匹配 ':controller(/:action(/:id))(.:format)'

那么你的 link_to 应该如下所示:

link_to "XML", :controller => "firms", :action => "xml", :id => 1234

其中 1234 是您要查找的实际 id。

于 2012-05-22T03:29:58.327 回答
1

检查该链接网址!

我不认为这是你所期待的。当您通过 合并两个哈希时hash1.merge(hash2),任何重复的键都会产生来自 的那些hash2。并且由于(如果我没记错的话)在 Rails 的路由过程中添加了params哈希:action:controller键,因此您的预期路由被当前(显示)页面的路由覆盖。

你可以尝试reverse_merge,这会给你一个更可预测的结果,但我建议使用 Rails 的路径生成助手让你的生活更轻松:

<%= link_to "XML", firm_xml_path(@firm) %>

希望有帮助!

于 2012-05-22T03:30:19.797 回答