Rails params(url_params vs form_data)

时间:2014-07-17 05:46:28

标签: ruby-on-rails

这只是出于好奇的问题。

Rails在为我们做很多事情的方式上是神奇的,但它伴随着诅咒的知识。 当Rails收到http请求时,我们可以通过params []访问客户端的输入。但是,我注意到params可以接受来自url_params和form_data的输入。例如:

# Get  users/:id (param comes from url)
# Post users     (param comes from form)

params []的工作原理是否有规律? Will Rails会将url和form中的所有参数都放到params []?

在NodeJS的情况下,

之间存在区别
request.params
request.body
request.query

2 个答案:

答案 0 :(得分:3)

答案可以在Rails指南中找到,关于Action Controller Overview -> Parameters

  

Rails没有对查询字符串参数和POST参数进行任何区分,并且两者都可以在控制器的params哈希中使用:

答案 1 :(得分:3)

什么是params?

参数只是从浏览器发送HTTP request时发送给控制器的参数。

params的类型?

如果你看rail guides就说

There are two kinds of parameters possible in a web application. The first are parameters that are sent as part of the URL, called query string parameters. The query string is everything after "?" in the URL. The second type of parameter is usually referred to as POST data. This information usually comes from an HTML form which has been filled in by the user

params的工作方式是否有规则?

正如@zwippie指出rails并不区分你的params是来自表单还是查询字符串但是它们在rails将这些params放入哈希的方式上有所不同因此在控制器中访问它们的方式不同

对于查询字符串:

如果您的网址类似于:

http://www.example.com/?vote[item_id]=1&vote[user_id]=2
然后你的参数将会是:

{"item_id" => "1", "user_id" => "2"}

因此您可以通过params[:item_id] and params[:user_id]

在控制器中访问它们

对于POST数据或表单:

让我们说你的表格就像

<%= form_for @person do |f| %>
  <%= f.label :first_name %>:
  <%= f.text_field :first_name %><br />

  <%= f.label :last_name %>:
  <%= f.text_field :last_name %><br />

  <%= f.submit %>
<% end %>

当您提交表单时,参数将如下所示

{"person"=>   {"first_name"=>"xyz", "last_name"=>"abc"}}

注意表单是如何将您的参数嵌套在哈希中,以便在您的控制器中访问它们,您必须执行params[:person]并获取您可以执行的单个值{ {1}}