Rails 4 - 通过 link_to 传递参数?

11

我有一个表单-根据用户点击显示表单的链接不同,我希望在提交时传递不同的隐藏参数以保存记录。有没有好的方法来实现这个功能?非常感谢!

例如:

<%= 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
2个回答

9

对于您的例子,您可以使用:

<%= 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


嗯,试试看吧。我基于 new_request_path 给出了我的答案,它看起来是指向 new 动作的。因此,我的 link_to 示例将把 projectadmin 参数传递到包含表单的页面上。这听起来比你想要参数的地方要早一些(在表单本身中,被传递到 create 动作)。 - James Chevalier
是的,我想在创建操作中使用参数,就像隐藏字段参数一样,只是根据点击链接动态生成。(如果有意义的话)-谢谢!我会尝试这些想法。 - Katie M
只是补充一下最后一个小细节,这对我很有用。如果你想在表单中检索该参数,可以使用类似 <%= f.hidden_field :admin, value: params[:admin] %> 的东西。 - Liz

2
我认为有两种方法可以完成你想做的事情。
  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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接