2017-07-25 136 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