我正在尝试将当前的参数@calc
发送到generate_csv
行动。
如何传递参数,以便我可以在generate_csv
操作中访问它们?
我的观点
- form_tag generate_csv_path(@calc) do
= submit_tag 'Print CSV'
我的路线:
match '/generate_csv', :to => "main#generate_csv", :via => :post
resources :main
创造了:
generate_csv POST /generate_csv(.:format) {:controller=>"main", :action=>"generate_csv"}
我的控制器
def generate_csv
..
替代方案:
我的控制器
def generate_csv(foobar)
我的观点
- form_tag generate_csv_path(@calc) do
= submit_tag 'Print CSV'
错误
wrong number of arguments (0 for 1)
如果我明显地将它传递给一个参数,怎么可能呢?它似乎不接受它。
答案 0 :(得分:2)
使用link_to
:
<%= link_to 'Print Csv', generate_csv_path(:id => @calc) %>
但如果您的参数是强制性的,请改变您的路线:
match '/generate_csv/:id', :to => "main#generate_csv"
否则:
match '/generate_csv/(:id)', :to => "main#generate_csv"
答案 1 :(得分:0)
我认为params[:calc]
变量应该可以帮助你控制器。此外,this question可能会对您有所帮助。在您的视图中,只需使用普通的表单标记。
答案 2 :(得分:0)
generate_csv_path(:calc => @calc)
应生成链接/generate_csv?calc=VALUE
在控制器中,您可以通过params hash params[:calc]
访问此值。
p.s:最近我遇到了params hash(ruby 1.9.2,rails 3.0.3)的问题,它没有从URL接收查询值。它只有控制器和动作值。从mongrel 1.2.rc切换到webrick就可以了。