我试图在铁轨(2.1)的链接:admin用户的为什么Rails的过程的link_to有:动作=>方法名作为ID =>方法名
- 只出现
- 点击时,执行在控制器的方法,
- 的方法执行一个小外壳脚本(例如,短的SQL查询,其输出的文本文件),
- 提示用户下载该输出文本文件,
- 一切上完成没有重定向的同一页面到另一页(理想)
我想这些解决方案运行在Ruby shell脚本:(1),(2)。在我reports_controller.rb
:
def runreport
#system('sh hello.sh')
puts `whoami` # << this is just to test shell script calling
end
在我view/report/index.html.erb
:
<% if is_logged_in? && logged_in_user.has_role?('Administrator') -%>
<p><span class="encapsulated"><%= link_to "Download File", { :action => 'runreport' } %></span></p>
<% end -%>
(该<span class="encapsulated">
只是把在一个不错的按钮形式的链接)。然而,当我点击了链接,它会返回一个错误:
ActiveRecord::RecordNotFound in ReportsController#show
Couldn't find Report with ID=runreport
...
app/controllers/reports_controller.rb:100:in `show'
随着参数:
{"id"=>"runreport"}
它看起来当链接指向自己(reports
)等,以执行默认方法“show
”。但是不是专门告诉我做action => 'runreport'
?我抓伤我的头,找了几个小时的答案,不能弄明白:(因此,我的问题是:
- 我在做什么错
- 为什么找? ID =>“runreport”?
- 如何修正这个错误?如果有可能,告诉它不能做重定向
- ,什么是剧本完成后交付文件给用户的理想方式?
预先感谢您的任何帮助/反馈!
干杯!
编辑:这是报告的routes.rb
什么样子:
map.resources :reports,
:member => { :claim => :put, :close => :put, :open => :put, :baz => :post },
:collection => {:search => :get} do |report|
report.resources :blah, :foo => { :bar => :post }
end
这是on Rails的2.1,所以我想这是从3.x的
你是如何为routes.rb中的报表控制器定义路由的? – 2012-02-17 01:35:49
我刚刚为 – mathiass 2012-02-17 23:16:38