热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RubyonRails-params是方法还是哈希?

如何解决《RubyonRails-params是方法还是哈希?》经验,为你挑选了2个好方法。

所以,我想了入门的Ruby on Rails的的部分指导这里.

我不明白本教程中的一行.引用它:

PARAMS方法是代表参数(或场)从表单来的在对象中.

我确实有一些以前的rails经验,我总是假设params是一个哈希.但在这里他们称之为method which is an object.

params一个method还是一个hash?另外,在ruby中,方法也是对象吗?



1> Jay-Ar Polid..:

params是一个返回对象方法.想想它是这样的:ActionController::Parameters

def params
  ActionController::Parameters.new(...)
end

示例(控制器或视图中的某个位置):

puts params
#=> 
puts params.is_a? Object
#=> true

Ruby中的方法总是返回一个(注意:nil也是一个),除非没有定义该方法.请记住,params即使你的代码中没有看到它已经由Rails定义了)

Ruby中方法的每个"返回值" 都是一个对象.甚至nil价值也是一个NilClass 对象.整数,字符串,数组和哈希也是对象.为什么?因为eveeeeery事物从Object 继承/开始.

如果

ActionController::Parameters继承自Hash ,这意味着您可以使用所有Hash 方法(请参阅此处的哈希方法).

例:

params.sort ...
params.each ...
params.has_key?(:controller)

但现在在> = Rails 5.1:

ActionController::Parameters NO LONGER继承自Hash ,所以你会认为你不能再使用像上面代码那样的方法了.sort,或者.has_key?你仍然可以!因为ActionController::Parameters定义了自己的自定义方法,从"看起来像"方法Hash.

注意:并非所有Hash方法都重新定义ActionController::Parameters.随意比较的方法,这里和这里,尤其sort是法Hash法并没有重新定义ActionController::Parameters,所以你不能做params.sort对Rails> = 5.1了.



2> sawa..:

    描述有点截断.确切地说,它应该被理解为:

    params方法的返回值是[an]对象...

    方法不是对象,但是当您执行方法时,它总是返回一个对象.在这种情况下,params是一个方法,而不是一个对象,但有一个返回值,它是一个对象.

    在旧版本的Rails中,返回值params曾经是哈希值,但现在,它不是哈希值.


@EricDuminil嘿,不要试图混淆初学者.`Method`类的实例由名为`method`的方法创建,并且是一个对象.它与方法不同.
Eric先前的评论使我运行`puts方法(:params).source_location`.它引导我到https://github.com/rails/rails/blob/4b969ea417f097d217ff1f662d2fe8c406d21b99/actionpack/lib/action_controller/metal/strong_parameters.rb,在那里我真的看到了`params`方法;)
推荐阅读
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • LeetCode笔记:剑指Offer 41. 数据流中的中位数(Java、堆、优先队列、知识点)
    本文介绍了LeetCode剑指Offer 41题的解题思路和代码实现,主要涉及了Java中的优先队列和堆排序的知识点。优先队列是Queue接口的实现,可以对其中的元素进行排序,采用小顶堆的方式进行排序。本文还介绍了Java中queue的offer、poll、add、remove、element、peek等方法的区别和用法。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
author-avatar
Blunt_X
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有