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包含以下三组参数:
- 用户提供的参数
- GET ( http://domain.com/url?param1=value1¶m2=value2将设置params [:param1]和params [:param2])
- POST (例如JSON,XML将自动被parsing并存储在params中)
- 注意:默认情况下,Rails复制用户提供的参数并将其存储在params [:user]中(如果在UsersController中),可以使用wrap_parameters设置进行更改
- 路由参数
- 在routes.rb中
match '/user/:id'
会设置params [:id]
- 在routes.rb中
- 默认参数
-
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