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

我希望能够逐行阅读这些代码,并理解发生了什么。

196130 次浏览

参数来自用户请求页面时的浏览器。对于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&vote[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 = Vote.new params[: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中提取并放入params的段。例如,如果你有这样一条路线:

match 'products/:id', ...

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

Params包含以下三组参数:

  1. 用户提供的参数
  • 得到(http://example.com/url?param1=value1&param2=value2将设置params[:param1]和params[:param2])
  • 帖子(例如JSON, XML将自动解析并存储在params中)
  • 注意:默认情况下,Rails复制用户提供的参数并将它们存储在params[:user]中,如果在UsersController中,可以通过wrap_parameters设置进行更改
  1. 路由参数
  • match '/user/:id' routes.rb中将设置参数[:id]
  1. 默认参数
  • params[:controller]params[:action]始终可用,包含当前控制器和动作
在Rails端,params是一个返回ActionController::Parameters对象的方法。 看到https://stackoverflow.com/a/44070358/5462485 < / p >