ruby-on-rails - Rails 控制台的 YAML 输出

标签 ruby-on-rails ruby console yaml

在 Rails 控制台中执行类似 y Grau.all 的命令时,我得到这些奇怪的 !binary 字符串而不是属性名称。知道如何解决这个问题吗?

谢谢。

irb(main):003:0> y Grau.all
  ←[1m←[36mGrau Load (0.0ms)←[0m  ←[1mSELECT "graus".* FROM "gr
  ←[1m←[35mEXPLAIN (0.0ms)←[0m  EXPLAIN QUERY PLAN SELECT "grau

EXPLAIN for: SELECT "graus".* FROM "graus"
0|0|0|SCAN TABLE graus (~1000000 rows)

---
- !ruby/object:Grau
  attributes:
    !binary "aWQ=": 27
    !binary "bm9tZQ==": 1 Grau
    !binary "Y3JlYXRlZF9hdA==": 2012-04-06 21:24:34.553163000 Z
    !binary "dXBkYXRlZF9hdA==": 2012-04-06 21:24:34.553163000 Z
- !ruby/object:Grau
  attributes:
    !binary "aWQ=": 28
    !binary "bm9tZQ==": 2 Grau
    !binary "Y3JlYXRlZF9hdA==": 2012-04-06 21:24:34.599963000 Z
    !binary "dXBkYXRlZF9hdA==": 2012-04-06 21:24:34.599963000 Z

[更新]

irb(main):001:0> Grau.find(1)
  ←[1m←[36mGrau Load (43.8ms)←[0m  ←[1mSELECT "graus".* FROM "graus" WHERE "grau
s"."id" = ? LIMIT 1←[0m  [["id", 1]]
=> #<Grau id: 1, nome: "1º Grau", created_at: "2012-04-11 15:51:32", updated_at:
 "2012-04-11 15:51:32">
irb(main):002:0>

我在 Windows 7 64 位上使用 Rails 3.2.3、Ruby 1.9.3。

最佳答案

这似乎是因为 rails 默认使用更新的 psych YAML 引擎,旧的 syck yaml 引擎不输出 !binary 键。如果您只是想在控制台中进行测试,您可以切换回旧的 yaml 引擎作为临时解决方法:

 > y User.first
  User Load (0.0ms)  SELECT "users".* FROM "users" LIMIT 1
--- !ruby/object:User
attributes:
  !binary "aWQ=": 1
  !binary "bmFtZQ==": Example User
  !binary "ZW1haWw=": user@example.com

 > YAML::ENGINE.yamler= 'syck'
=> "syck"

 > y User.first
  User Load (1.0ms)  SELECT "users".* FROM "users" LIMIT 1
--- !ruby/object:User
attributes:
  id: 1
  name: Example User
  email: user@example.com

只有当您的 ActiveRecord 列名称/属性键使用 Encoding::ASCII_8BIT 编码时,您才需要这样做,我认为这只会发生在 SQLite 中。


更新:

自发布此答案以来,SQLite3 gem 已修复为 return utf8 for column names .确保您使用的是 1.3.6(或更高版本)的 sqlite3 gem。然后默认/更新的 psych yaml 引擎(它也支持人类可读的 unicode 输出)将毫无问题地工作:

 > y User.first
  User Load (0.0ms)  SELECT "users".* FROM "users" LIMIT 1
  EXPLAIN (0.0ms)  EXPLAIN QUERY PLAN SELECT "users".* FROM "users" LIMIT 1
EXPLAIN for: SELECT  "users".* FROM "users"  LIMIT 1
0|0|0|SCAN TABLE users (~1000000 rows)

--- !ruby/object:User
attributes:
  id: 1
  name: irmão
  email: user@example.com

关于ruby-on-rails - Rails 控制台的 YAML 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10050615/

相关文章:

javascript - 引用错误 : HighCharts is not defined

ruby-on-rails - Rails 中的 link_to 方法和点击事件

从一台计算机移动到另一台计算机时程序崩溃

windows - 如何使 Eclipse 输出标准 :out to a standard windows console

ruby-on-rails - will_paginate 路由仅适用于 > 1 页

ruby-on-rails - 协会的 Rails 索引

c++ - 带有 g++ 的不需要的警告消息

ruby-on-rails - 如何用两个for循环优化程序

Emacs Ctrl 修饰符在控制台中不起作用

ruby-on-rails - tinymce setContent 不适用于 erb