我試圖在鐵軌(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