2014-07-17 85 views
1

這只是一個出於好奇而提出的問題。Rails params(url_params vs form_data)

Rails是神奇的,它爲我們做了很多事情,但它帶有一個知識的詛咒。 當Rails收到一個http請求時,我們可以通過params []從客戶端訪問輸入。但是,我注意到params可以接受來自url_params和form_data的輸入。例如:

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

params []是如何工作的規則?將Rails只是把所有參數從URL和形式params []?

在的NodeJS的情況下,有

request.params 
request.body 
request.query 

回答

3

之間的區別答案可以在Rails的指南中找到一章中關於Action Controller Overview -> Parameters

Rails不作任何區別在查詢字符串參數和POST參數之間,並且兩者都可以在控制器的參數哈希中找到:

+0

感謝zwippie單個值! – Khanetor

2

什麼是params?

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指出,軌道不作任何區分是否您的PARAMS從窗體或查詢字符串,來,但他們的方式不同軌道放在一個哈希這些PARAMS,因此不同的方式來訪問這些控制器中

對於查詢字符串:

如果您的網址是這樣的:

http://www.example.com/?vote[item_id]=1&vote[user_id]=2 

那麼你PARAMS看起來像:

{"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],並讓你可以做params[:person][:first_name]

+0

謝謝Mandeep。這是非常有用的信息。 – Khanetor