私はRailsの内のリンク(2.1)ことを確認しようとしています:なぜRailsのプロセスのlink_toと:アクション=> methodNameのようにID => methodNameの
- のみ表示され、管理者ユーザーのための
- がクリックされました、すべてがオンに行われ
- 、出力テキストファイルをダウンロードするようにユーザーに促します
- 、この方法は、小さなシェルスクリプト(テキストファイルを出力し例えば短いSQLクエリ)を実行
- 、コントローラにメソッドを実行しますリダイレクトせずに同じページ(1)、(2):別のページ(理想的には)
に私は、Rubyからシェルスクリプトを実行するために、これらのソリューションを試してみました。私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」?
- ?それはリダイレクト
- を行うと、どのようなスクリプトが実行された後、ユーザーにファイルを提供するための理想的な方法だ? ないし、それを伝えることが可能です場合
ご協力いただきありがとうございます!
乾杯!
EDIT:これは、レポートの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
これはRailsの2.1にあるので、私はそれが一般的に問題がルートである3.xの
routes.rbのレポートコントローラのルートをどのように定義しましたか? –
上記のレポートコントローラのルートを追加したばかりです – mathiass