Rails params解释说?

Dru*_*Dru 226 ruby ruby-on-rails

任何人都可以params在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
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*son 277

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

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

然后params[:foo]将是"1"并且params[:boo]将是"章鱼".

在HTTP/HTML中,params实际上只是一系列键值对,其中键和值是字符串,但Ruby on Rails有一个特殊的语法,使params成为哈希内部哈希.例如,如果用户的浏览器请求

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数组.

  • 相当于$ _REQUEST,但$ _REQUEST包括get,post和cookie数据,而params只能获取和发布数据. (12认同)
  • @renocor POST数据也包含在Rails`params`哈希中.Cookie数据包含在`session`哈希中. (3认同)

ham*_*mar 73

正如其他人所指出的那样,params值可以来自GET请求的查询字符串,也可以来自POST请求的表单数据,但是它们也可以来自第三位:URL的路径.

您可能知道,Rails使用称为路由的东西将请求定向到相应的控制器操作.这些路由可能包含从URL中提取并放入的段params.例如,如果您有这样的路线:

match 'products/:id', ...
Run Code Online (Sandbox Code Playgroud)

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


the*_*jaz 47

Params包含以下三组参数:

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

  • 我在Rails 4中看到了重复的参数,但只有json POST请求(使用Angularjs)不在Rails自己的HTML帖子下.此链接解释了原因:http://stackoverflow.com/questions/10774972/rails-wrap-parameters-vs-include-root-in-json-what-is-the-difference (2认同)

Sma*_*mar 13

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

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

提交表单时,控件将返回给应用程序.如何获得您提交给表单的值?params是如何.

关于你的代码.@vote = Vote.new params[:vote]使用params [:vote]的数据创建新的数据库投票.鉴于您的表单用户提交的名称是在name:vote下命名的,它的所有数据都在这个:hash的投票字段中.

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

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

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

下一行需要最后一次投票时间和当前时间.


小智 6

在Rails方面,params是一种返回ActionController::Parameters对象的方法。参见/sf/answers/3084925091/

  • +1是为了澄清`params`是一种方法。Ruby使得很难将变量与方法区分开 (2认同)