任何人都可以在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
我希望能够逐行阅读此代码并了解正在发生的事情。
答案 0 :(得分:266)
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参数等同于$_REQUEST array in PHP。
答案 1 :(得分:73)
正如其他人所指出的,params
值可以来自GET请求的查询字符串,也可以来自POST请求的表单数据,但是它们也可以来自第三位: URL。
您可能知道,Rails使用称为路由的东西将请求定向到相应的控制器操作。这些路由可能包含从URL中提取并放入params
的段。例如,如果您有这样的路线:
match 'products/:id', ...
然后,对http://example.com/products/42
等网址的请求会将params[:id]
设置为42
。
答案 2 :(得分:46)
Params包含以下三组参数:
match '/user/:id'
将设置params [:id] params[:controller]
和params[:action]
始终可用且包含当前控制器和操作答案 3 :(得分: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])
使用条件item_id = item和user_id = uid从数据库中查找最新或最后插入的投票。
下一行需要最后一次投票时间和当前时间。
答案 4 :(得分:4)
在Rails端,params
是一个返回ActionController::Parameters
对象的方法。
见https://stackoverflow.com/a/44070358/5462485