- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
在第 7 章中,我使用
获得以下输出--- !ruby/hash-with-ivars:ActionController::Parameters
elements:
controller: static_pages
action: home
ivars:
:@permitted: false
谁能解释一下 hash-with-ivars 的来源以及什么是 ivars: :@permitted: false 是什么意思?
最佳答案
有趣的问题!我在一个 Rails 项目的所有库资源中搜索了 'hash-with-ivars'
并且只出现了一个地方:psych
ruby library用于(反)序列化任意对象到YAML .具体来说,这些是 reading 的源代码链接。和 writing这个 YAML 结构。
在Chapter 7在 Rails 教程中,此输出作为 debug(params)
命令的输出出现,您被指示放入模板中。 debug
命令显然调用了 psych
库来显示对象的可读表示(在本例中为 params
)。
现在,params
- 用于保存从 URL 或表单传递的参数的通用 Rails 数据结构 - 是一个行为类似于 Hash
但不是纯哈希的对象:它是 ActionController::Parameters
类的一个实例,它是 Hash
的子类,让我们看看 class definition :
module ActionController
# ...
class Parameters < ActiveSupport::HashWithIndifferentAccess
# ...
end
end
而 HashWithIndifferentAccess
是 Hash
的直接子类。
作为 Hash
的子类,params
对象可以保存哈希本身之外的其他数据,这正是 psych
在尝试时实际支持的以可读形式打印对象。除了打印所有哈希元素(在 elements
键下),它还尝试列出对象的所有实例变量,并将其打印在 ivars
键。
所以,总而言之,这个调试打印只是说被调试的对象是 ActionController::Parameters
类的实例,它是 Hash
的子类,除了它的哈希元素之外,还定义了一个 @permitted
实例变量,它当前设置为 false
。顺便说一下,controller
和 action
这两个元素是 Rails 内部用于路由的参数。
当您再次查看该类的源代码时,您确实会在构造函数中找到 @permitted
变量:
class Parameters < ActiveSupport::HashWithIndifferentAccess
# ...
def initialize(attributes = nil)
super(attributes)
@permitted = self.class.permit_all_parameters
end
end
最后,来自documentation我们可以得出结论,@permitted
变量保存了 params 权限的状态。 IE。在使用 permit
方法允许参数后,它被设置为 true
:
permitted = params.require(:person).permit(:name, :age)
permitted.permitted? # this prints out the @permitted instance variable
# => true
更新:为什么 RailsTutorial 的调试输出不同
RailsTutorial 的调试输出有点不同 - 它不打印 ivar
。为什么?这是因为序列化 hash-with-ivars
的特性被添加到 psych
gem 的 version 2.0.9 中。 . psych
gem 现在是 Ruby 标准库的一部分,它的这个特定版本已被 added到 stdlib 2.3.0 preview1 版本。
所以,神秘的不同输出有一个简单的解释:RailsTutorial 作者在写这本书时很可能使用了 ruby 2.2 或更早版本,而这个 ruby 版本还没有在 Hash
调试输出中显示实例变量.实际上,教程中有提示 suggest作者使用 ruby 2.1.5。
关于ruby-on-rails - railstutorial 调试信息来自哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36655635/
app/helpers/sessions_helper.rb module SessionsHelper def sign_in(user) cookies.permanent[
在 rubyrailstutorial.org 之后达到内存限制 你好, 我正在关注 Ruby Rails Tutorial 上的教程我正在使用 Cloud9 IDE但是,在运行本教程时,我不断收
我正在研究 Michael Hartl Railstutorial.org - 第 10 章 - 密码重置。我在开发环境(Cloud9)配置了邮件,邮件就发了。一切正常,直到用户单击系统发送的电子邮件
在第 7 章中,我使用 获得以下输出 --- !ruby/hash-with-ivars:ActionController::Parameters elements: controller: st
在 Ruby on Rails 3 教程的 6.2.4 节中,Michael Hartl 描述了一个关于检查电子邮件地址唯一性的警告:如果两个相同的请求及时接近,请求 A 可以通过验证,然后 B 通过
我正在尝试关注 Rails Tutorial,但我的 rspec 失败了,但在浏览器中,该应用程序可以按需运行。那是当我登录(在浏览器中)并转到“http://localhost:3000/users
我正在尝试关注 railstutorial.org,目前在第 7 章,您开始使用工厂:http://railstutorial.org/chapters/modeling-and-viewing-us
我正在尝试让错误闪现出现在 railstutorial.org 示例应用程序中。到目前为止,这就是我所做的。谁能帮我找出错误: 我的 RSPEC 测试失败: 1) SessionsController
在11.2.5部分在 Railstutorial(.org) 的 Rails 3.2 版本中,我无法让所有的https://relationships_controller_spec.rb 测试通过,
我是 Rails 的新手,所以请原谅以下菜鸟问题并提前致谢... 我正在关注 rails tutorial然而,一旦我到达第 9.12 节,我们将忘记逻辑添加到 sessions_helper.rb,
在阅读 Michael Hartl 的 railstutorial.org 时,我进入了第 8 章(特别是 8.2.3)。当前的问题是实现一个 session 以保持用户在多个 View 中登录,但是
在railstutorial中,作者为什么选择使用这个(代码 list 10.25): http://ruby.railstutorial.org/chapters/updating-showing-
这个想法是为了让管理员用户无法 self 毁灭。我写了以下测试: describe "as admin user" do let(:admin) { FactoryGirl.create(:adm
这个想法是为了让管理员用户无法 self 毁灭。我写了以下测试: describe "as admin user" do let(:admin) { FactoryGirl.create(:adm
我正在学习 http://ruby.railstutorial.org 上的教程 具体来说,第 9 章 (9.2.3) http://ruby.railstutorial.org/chapters/u
我没有从 Hartl 的 Rails 教程中得到以下练习的答案: By replacing the question marks in Listing 4.10 with the appropriat
我正在关注 rails 教程并被困在第 1.4.3 章 Bitbucket 上。 https://www.railstutorial.org/book/beginning#sec-bitbucket
我已完成 Chapter 6 of railstutorial但我所有的 User model specs在我添加 password 后不久就开始失败& password_confirmation有以
我在 Section 11.3.1的 Rails 教程,所有测试都在此之前通过。之后,主页(有微博提要)因以下错误而中断: PG::Error: ERROR: invalid input synta
示例代码: assert_select 'div#' assert_select 'div.' 这会产生:弃用警告:由于无效的 css 选择器,断言未运行。 ] 16% 时间:00:00:01,预计到
我是一名优秀的程序员,十分优秀!