谁能解释一下Rails控制器中的参数:它们来自哪里,它们引用了什么?

  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中,参数实际上只是一系列键-值对,其中键和值是字符串,但是Ruby on Rails有一种特殊的语法,可以使参数成为一个包含哈希的哈希值。例如,如果用户的浏览器请求

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

那么params[:vote]将是一个哈希值,params[:vote][:item_id]将是“1”,params[:vote][:user_id]将是“2”。

Ruby on Rails的参数相当于PHP中的$_REQUEST数组。


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

当您提交表单时,通常使用post请求而不是GET请求。如果有帮助的话,在浏览站点时,可以将普通的rails请求视为GET请求。

当您提交表单时,控件将被抛回应用程序。如何获得提交给表单的值?Params是how。

关于你的代码。@vote =投票。new params[:vote]使用参数[:vote]的数据创建新的vote到数据库。假设你的表单用户提交的是在name:vote下命名的,它的所有数据都在这个:vote字段的散列中。

接下来的两行用于获取用户提交给表单的条目和uid。

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

用item_id = item和user_id = uid从数据库中查找最新插入的或最后插入的投票。

下一行显示上次投票时间和当前时间。


正如其他人所指出的,params值可以来自GET请求的查询字符串或POST请求的表单数据,但它们还可以来自第三个地方:URL的路径。

您可能知道,Rails使用路由将请求定向到相应的控制器操作。这些路由可能包含从URL中提取并放入参数的段。例如,如果你有这样一条路线:

match 'products/:id', ...

然后,对http://example.com/products/42这样的URL的请求将params[:id]设置为42。


Params包含以下三组参数:

用户提供的参数

GET (http://example.com/url?param1=value1&param2=value2将设置params[:param1]和params[:param2]) POST(例如JSON, XML将自动解析并存储在params中) 注意:默认情况下,Rails复制用户提供的参数并将它们存储在params[:user]中,如果在UsersController中,可以通过wrap_parameters设置进行更改

路由参数

在路由中匹配“/user/:id”。Rb将设置参数[:id]

默认参数

Params [:controller]和Params [:action]始终可用,包含当前控制器和动作


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