Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails railstutorial调试信息来自哪里_Ruby On Rails_Ruby_Railstutorial.org - Fatal编程技术网

Ruby on rails railstutorial调试信息来自哪里

Ruby on rails railstutorial调试信息来自哪里,ruby-on-rails,ruby,railstutorial.org,Ruby On Rails,Ruby,Railstutorial.org,在第7章中,我得到了以下输出 --- !ruby/hash-with-ivars:ActionController::Parameters elements: controller: static_pages action: home ivars: :@permitted: false 有人能解释一下带ivar的哈希来自何处以及ivar是什么: :@allowed:false意味着什么?有趣的问题!我在rails项目的所有库源中搜索了“hash-with-ivars”,只找到了一个

在第7章中,我得到了以下输出

--- !ruby/hash-with-ivars:ActionController::Parameters
elements:
  controller: static_pages
  action: home
ivars:
  :@permitted: false
有人能解释一下带ivar的哈希来自何处以及ivar是什么:
:@allowed:false意味着什么?

有趣的问题!我在rails项目的所有库源中搜索了
“hash-with-ivars”
,只找到了一个地方:用于将任意对象与之进行(反)序列化。具体地说,这些是指向和此YAML结构的源代码的链接

在Rails教程的第二部分中,此输出作为
debug(params)
命令的输出,您被指示将其放入模板中。
debug
命令显然调用了
psych
库来显示对象的可读表示(在本例中为
params

现在,
params
——保存从URL或表单传递的参数的通用Rails数据结构——是一个行为类似于
Hash
但不是纯Hash的对象:它是类
ActionController::parameters
的实例,它是
Hash
子类,让我们看看:

最后,从中我们可以得出结论,
@allowed
变量保存params权限的状态。即,在使用
permit
方法允许参数后,将其设置为
true

permitted = params.require(:person).permit(:name, :age)
permitted.permitted? # this prints out the @permitted instance variable
# => true
更新:为什么Railstorial的调试输出不同

RailsTutorial上的调试输出略有不同-它不打印
ivar
s。为什么?这是因为在its的
psych
gem中添加了使用ivars序列化
哈希的功能。
psych
gem现在是Ruby标准库的一部分,它的这个特定版本已经发布到stdlib 2.3.0 preview1版本


因此,这个神秘不同的输出有一个简单的解释:RailsTutorial的作者在写这本书时很可能使用了ruby 2.2或更早版本,而这个ruby版本还没有在
Hash
debug输出中显示实例变量。实际上,教程中有一些提示,作者使用了ruby 2.1.5。

在静态页面#主页中是否允许@allowed任何实例变量?控制器或html中不允许@allowed。我已经检查了我创建的每个文件,但找不到它。@DCR对此有解决方案吗?我正在考虑尝试对参数进行无所谓的访问,因为我没有想法&其中30+个SO的答案中没有一个是我的问题阅读检查答案这是一个很好的答案,但为什么教程的示例输出不匹配?我和作者谈过了,他无法解释发生了什么。我需要等8个小时才能给你发赏金。谢谢你的帮助。这是直接的团队合作,也是社区S.O.对编码世界至关重要的原因。
class Parameters < ActiveSupport::HashWithIndifferentAccess
  # ...
  def initialize(attributes = nil)
    super(attributes)
    @permitted = self.class.permit_all_parameters
  end
end
permitted = params.require(:person).permit(:name, :age)
permitted.permitted? # this prints out the @permitted instance variable
# => true