Rails的参数解释?

任何人都可以在Rails控制器中解释params :它们来自哪里以及它们引用的是什么?

  def create @vote = Vote.new(params[:vote]) item = params[:vote][:item_id] uid = params[:vote][:user_id] @extant = Vote.find(:last, :conditions => ["item_id = ? AND user_id = ?", item, uid]) last_vote_time = @extant.created_at unless @extant.blank? curr_time = Time.now end 

我希望能够逐行阅读这段代码,并了解正在发生的事情。

当请求页面时,参数来自用户的浏览器。 对于最常见的HTTP GET请求,参数在url中编码。 例如,如果用户的浏览器请求

http://www.example.com/?foo=1&boo=octopus

那么params[:foo]将是“1”, params[:boo]将是“octopus”。

在HTTP / HTML中,参数实际上只是一系列键和值对,其中键和值都是string,但是Ruby on Rails有一个特殊的语法,使得参数成为哈希值。 例如,如果用户的浏览器请求

http://www.example.com/?vote%5Bitem_id%5D=1&vote%5Buser_id%5D=2

那么params[:vote]将是一个散列, params[:vote][:item_id]将是“1”, params[:vote][:user_id]将是“2”。

Ruby on Rails params与PHP中的$ _REQUEST数组是等价的。

正如其他人指出的, params值可以来自GET请求的查询string,或POST请求的表单数据,但也可以来自第三方:URL的path。

正如你可能知道的那样,Rails使用称为路由的东西将请求引导到相应的控制器动作。 这些路由可能包含从URL中提取并放入params 。 例如,如果你有这样的路线:

 match 'products/:id', ... 

然后,像http://example.com/products/42这样的URL请求会将params[:id]42

Params包含以下三组参数:

  1. 用户提供的参数
    • GET http://domain.com/url?param1=value1&param2=value2将设置params [:param1]和params [:param2])
    • POST (例如JSON,XML将自动被parsing并存储在params中)
    • 注意:默认情况下,Rails复制用户提供的参数并将其存储在params [:user]中(如果在UsersController中),可以使用wrap_parameters设置进行更改
  2. 路由参数
    • 在routes.rb中 match '/user/:id' 会设置params [:id]
  3. 默认参数
    • params[:controller]params[:action]始终可用并包含当前的控制器和操作

基本上,参数是用户指定的数据导轨应用程序。

发布表单时,通常使用POST请求而不是GET请求。 您可以将普通导轨请求视为GET请求,当您浏览网站时,如果有帮助。

当您提交表单时,控件将被抛回到应用程序中。 你如何得到你提交给表单的值? params是如何的。

关于你的代码。 @vote = Vote.new params[:vote]使用params [:vote]的数据创build新的数据库表决。 鉴于你提交的表单用户名字是named,所有的数据都在hash表单中。

接下来的两行是用来获取项目和uid用户已经提交到表单。

 @extant = Vote.find(:last, :conditions => ["item_id = ? AND user_id = ?", item, uid]) 

发现最新或最后插入,从条件item_id = item和user_id = uid的数据库投票。

下一行需要最后的投票时间和当前时间。

在Rails方面, params是一个返回ActionController::Parameters对象的方法。 请参阅https://stackoverflow.com/a/44070358/5462485