建立转移参数的路线的适当方法是什么?

时间:2011-01-29 21:03:09

标签: ruby-on-rails csv parameters

我正在尝试将当前的参数@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)

如果我明显地将它传递给一个参数,怎么可能呢?它似乎不接受它。

3 个答案:

答案 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就可以了。