2017-07-25 137 views
0

我一直在試圖弄清params方法是如何工作的,而且我有點卡在這個過程中。params方法如何工作?

例如,如果用戶點擊索引頁面中的某個博客文章,我猜測link_to方法會調用Post控制器和顯示操作及其塊@post = Post.find(params[:id]),然後轉到數據庫以查找該文章並且視圖顯示它。

因此,我的缺失鏈接似乎是傳遞給params方法的帖子ID?

+0

您需要了解關於ruby中的'hash' – Pavan

回答

2

因爲別人已經解釋有關params,我只是要直接回答你的問題:是的帖子ID傳遞到PARAMS方法

我認爲最好用一個例子來解釋。見下圖:

說,你點擊一個鏈接: /posts/1/?param1=somevalue1&param2=somevalue2

Rails的服務器收到客戶端要查看此GET /posts/1/?param1=somevalue1&param2=somevalue2解決這一請求。

要確定Rails服務器將如何應對時,服務器將首先轉到您的routes.rb並找到匹配的控制器動作,將處理這個請求:

# let's say your routes.rb contain this line 
# resources :posts 

# resources :posts above actually contains MANY routes. One of them is below 
# For sake of example, I commented above code, and I only want you to focus on this route: 
get '/posts/:id', to: 'posts#show' 
  • 從上面的通知,有這個:id,Rails會自動將params[:id]設置爲這個值的:id。這是您的問題的答案,其中params[:id]來自。

  • 它不必是:id;你可以任意命名。你甚至可以有像這樣的多個URL參數(只是一個例子):

    get /users/:user_id/posts/:id它將分別自動設置params[:user_id]params[:id]上的值。

  • 除了這個URL參數像:id之外,Rails還自動從路由中向params[:controller]params[:action]注入值。從上面的示例中說,get '/posts/:id', to: 'posts#show',這將設置params[:controller]'posts'params[:action]'show'

  • params值也來自其它來源,如通過MAYUR所描述的,和也來自所述請求,則提交表單(形式值的body部分內設置等的body「查詢字符串」請求),就像你有JSON請求一樣,所有這些都由Rails自動分析,以便你方便,所以你可以簡單地訪問params並獲取你需要的值。

0

params方法是如何工作的?

參數來自用戶的瀏覽器,當他們請求頁面。對於HTTPGET請求,這是最常見的,參數在URL中編碼。例如,如果用戶的瀏覽器請求

http://www.example.com/?post=1&comment=demo 

然後params[:post]將是「1」,params[:comment]將是「演示」。

在HTTP/HTML中,參數實際上只是一系列鍵和值對,其中鍵和值都是字符串,但Ruby on Rails有一個特殊的語法用於使參數成爲散列或數組的散列或字符串裏面。

這可能是這樣的:

{"post"=>"1", "comment"=>"demo"} 

鏈接到Rails的指南上PARAMS:guides

+1

「是一個帶哈希值的哈希值」 - 不一定是哈希值。可以是字符串,散列或數組。我很確定有一些布爾轉換也在進行。 –

0

PARAMS是與Indifferent訪問,這意味着紅寶石哈希,

hsh = {"a" => 1, "b" => 2} 

考慮這個HSH作爲從瀏覽器的POST請求返回的參數,它是一個鍵值對,鍵爲字符串。因爲它是一個PARAMS所以值可以作爲形成

hsh["a"] 
    => 1 
    hsh [:a] 
    => 1 

PARAMS在客戶端上,其中接口負載,考慮其具有的形式來訪問的提交按鈕。當您按下提交時,表單中填充的數據或任何隱藏的文本框都會形成一個散列並通過請求傳遞。這在服務器端收到時將被稱爲參數或請求參數。

對於獲取請求:通過url發送的數據將在後端讀爲params。

GET: http://www.abx.com?user=admin 
params on backend: {"user" => "admin"} 
This will be displayed in rails server logs 

對於Put請求:數據發送到整個身體將被稱爲params。

PUT: http://www.abx.com 
data: {"user" => "admin"} Client side 
params on backend: {"user" => "admin"} 
This will be displayed in rails server logs