问题 Rails 4 - 通过link_to传递参数?


我有一个表单 - 根据用户点击显示表单的链接,我希望将不同的隐藏参数传递给记录并在提交时保存。有一个很好的方法来做到这一点?提前致谢!

例如:

<%= link_to 'General Request', new_request_path %>

<%= link_to 'Project Request', new_request_path %> ### -> set request.project = true

<%= link_to 'Administrative Request', new_request_path %>  ### -> set request.admin = true

1752
2017-07-17 17:36


起源



答案:


对于您的示例,您将使用:

<%= link_to 'Project Request', new_request_path(project: true) %>

会产生类似的链接 http://127.0.0.1:3000/request?project=true

<%= link_to 'Administrative Request', new_request_path(admin: true) %>

会产生类似的链接 http://127.0.0.1:3000/request?admin=true


9
2017-07-17 18:18



人力资源管理。是的,试一试。我根据我的答案 new_request_path,看起来像是去了 new 行动。所以我的 link_to 例子会通过 project 和 admin 页面上带有表单的参数。这听起来比你想要参数的声音要早一些(在表单本身,传递给 create 行动)。 - James Chevalier
是的,我希望创建动作中的参数,如隐藏的场参数,只能动态地根据点击的链接到达那里。(如果这是有道理的) - 谢谢!我会修补这些想法。 - Katie M
只是添加最后一点,这使我的工作,如果你想在表单中检索该参数,你可以使用像 <%= f.hidden_field :admin, value: params[:admin] %>。 - Liz


答案:


对于您的示例,您将使用:

<%= link_to 'Project Request', new_request_path(project: true) %>

会产生类似的链接 http://127.0.0.1:3000/request?project=true

<%= link_to 'Administrative Request', new_request_path(admin: true) %>

会产生类似的链接 http://127.0.0.1:3000/request?admin=true


9
2017-07-17 18:18



人力资源管理。是的,试一试。我根据我的答案 new_request_path,看起来像是去了 new 行动。所以我的 link_to 例子会通过 project 和 admin 页面上带有表单的参数。这听起来比你想要参数的声音要早一些(在表单本身,传递给 create 行动)。 - James Chevalier
是的,我希望创建动作中的参数,如隐藏的场参数,只能动态地根据点击的链接到达那里。(如果这是有道理的) - 谢谢!我会修补这些想法。 - Katie M
只是添加最后一点,这使我的工作,如果你想在表单中检索该参数,你可以使用像 <%= f.hidden_field :admin, value: params[:admin] %>。 - Liz


我认为有两种方法可以完成你想要做的事情。

  1. 创建3个不同的路由来完成不同类型的请求。例如, new_request_pathnew_project_request_pathnew_admin_request_path

  2. 如果您要申请新项目,请使用 <%= link_to 'Project Request', new_request_path(:request_type => 'project') %>。在控制器中,您可以处理不同的请求类型。

def new
  case params[:request_type]
  when 'general'
    do_something
  when 'project'
    do_something_1
  when 'admin'
    do_something_else
  end

  ...
end

2
2017-07-17 18:20