为什么我不能将params传递给link_to到控制器上?

时间:2015-04-06 17:25:37

标签: ruby-on-rails

我的haml视图中有以下link_to方法:

= link_to(t('compare.view_as_graph'), compare_graph_projects_url, remote: true)

当我点击此链接时,我想要我的网址的params有这个扩展名:

p/compare?project_0=MySQL&project_1=fast-math

传递到我用其中的以下代码创建的compare_controller。

def projects_graph
  respond_to do |format|
    format.js
  end
end

目前代码在我检查时给了我这个params哈希:

{"controller"=>"compare", "action"=>"projects_graph", "query"=>nil}

这不是我需要的。我需要project_0和project_1部分。 这是我从routes.rb

的路线
 get 'p/graph', to: 'compare#projects_graph', as: :compare_graph_projects

我尝试了很多这样的事情

compare_graph_projects_url(params)
compare_graph_projects_url(opts[:graph])
= link_to(t('compare.view_as_graph'), compare_graph_projects_url, data: {params: params}, remote: true)

(opts [:graph]是haml中包含params的变量)

我在这里做错了什么?为什么我不能用AJAX请求获取参数?

我能想到的唯一另一件事是request.referer来获取实际的标题信息,但这看起来并不是很困难。帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

你只需要传递url helper中的值,如下所示:

= link_to(t('compare.view_as_graph'), compare_graph_projects_url(project_0: "Your value", project_1: "your value"), remote: true)

然后你可以在控制器中访问它们,如下所示:

def projects_graph
  @proj_0 = params[:project_0]
  @proj_1 = params[:project_1]
end

您还应该阅读action controllers了解有关工作原理的详细信息。

答案 1 :(得分:2)

您应该将参数传递给路径助手,如下所示:

compare_graph_projects_url(project_0: opts[:graph][project_0], project_1: opts[:graph][project_0])