问题标签 [openstruct]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
997 浏览

ruby-on-rails - Ruby on Rails 字符串到 OpenStruct

我有以下 OpenStruct 对象,但如果我调用 .class 它是一个字符串。如何将其转回 OpenStruct 对象?

0 投票
1 回答
3565 浏览

ruby - 带有openstruct的未定义方法'each_pair'

我正在使用 OpenStruct 来操作这样的 json:OpenStruct.new '{"age":100,"name":"name"}'我得到了

NoMethodError: undefined method `each_pair' for "{\"age\":100,\"name\":\"name\"":String

这段代码前段时间可以工作,现在不行了。

我正在使用 Ruby 2.1

0 投票
0 回答
603 浏览

ruby - 将 JSON 字符串解析为具有属性的对象

目前我的应用程序正在以下列方式解析 JSON:

但这种方法存在问题:

  1. JSON 允许根级数[{id: 1, name: "first"}, {id: 2, name: "second"}]组,而 OpenStruct 无法处理它们引发异常。
  2. OpenStruct 不处理嵌套元素。

我找到了一些解决方案,例如 RecursiveOpenStruct 等。

  1. 他们处理嵌套哈希,但仍然无法处理顶级数组
  2. 嵌套到数组中的散列仍然是散列:{data: [{id: 1, name: "first"}, {id: 2, name: "second"}]}这里每个.data[i]都是一个散列。
0 投票
1 回答
174 浏览

ruby-on-rails - Ruby 和 OpenStruct 只允许访问一些数据

我有一组 OpenStruct 数据结构。但是当我尝试访问它们时,我只能访问country

例如

返回所有国家,但如果我这样做

很多空行被返回。

0 投票
0 回答
527 浏览

ruby - 在 Ruby Openstruct 中验证键/值的存在/有效性

是否有标准方法来验证 Ruby 的 Openstruct 中的键/值(是否存在键,是否为有效值)?在纯 Ruby 中,没有 Rails/Sinatra,但与 ActiveRecord 或 ActiveModel::Validations 中的验证类似。例如,要检查 Openstruct 是否包含“id”键,请检查“名称”键的值是否不超过 X 个字符,检查“协议”键的值是否仅包含特定值,例如“tcp”,而不包含“abc” , ETC。

0 投票
3 回答
125 浏览

ruby-on-rails - 分组哈希中的唯一对象

我有一个由.group_by方法创建的散列,其中字符串作为键,AR 对象作为值。而且我想摆脱带有重复字段的 AR 对象(其他字段可能相同也可能不同)

为了澄清我创建了这个片段的问题:

grouped_hash这是:

现在,结果我想要一个哈希,fid每个键都有唯一的 s:

我的解决方案需要几个动作并且看起来很丑。

我正在寻找最优雅(可能是 1-liner)和最有效的方式(没有哈希重新创建)。

0 投票
2 回答
4517 浏览

ruby - 从 YAML 创建嵌套对象以通过 Ruby 中的方法调用访问属性

我对红宝石完全陌生。我必须解析一个 YAML 文件来构造一个对象

YAML 文件

我想从此 YAML 创建一个对象,为此我用 Ruby 编写了以下代码

我可以使用 [] 成功访问该对象的属性,例如

但是,我想通过方法调用访问属性

例如

有没有办法构造这样一个对象,其属性可以通过上述(点)方式访问?我读过OpenStructhashugar。我也想避免使用第三方宝石

0 投票
3 回答
578 浏览

ruby-on-rails - Ruby:你能确定一个对象是否调用了它的某个方法吗?

我不确定我是否问对了问题。我可能错误地解决了这个问题,但基本上我在这里遇到了这种情况:

所以基本上,我必须满足所有这些条件,我什至不确定如何处理这个(我今天刚刚学习了 Ruby)。

请注意访问内部变量的点符号,否则我只会让profile成为符号的散列。所以我尝试了两种方法,这只能让我到达那里

方法 1:将配置文件设为 OpenStruct

所以这允许我使用点符号访问姓名、年龄和性别,如果键不存在,它会自动返回 nil,但是obj.profile的类型是OpenStruct而不是Hash

方法 2:将配置文件设为自己的类

有了这个,我将它们设置为实例变量,如果它们不存在,我可以使用method_missing返回 nil。但是,我再次遇到obj.profile不是正确类型/类的问题

有什么我想念的吗?有没有办法区分

在 getter 函数中并返回散列或其他?

我可以更改我的自定义类为配置文件返回的内容,因此它返回一个哈希值吗?

我什至尝试检查obj.profile的 get 函数中的args和 **kwargs ,但它们似乎都没有帮助,或者如果我调用obj.profile.something则填充

0 投票
2 回答
1249 浏览

ruby - 覆盖 OpenStruct 的 getter 以便将其打印为 Hash

目标:OpenStruct 对象的值应打印为散列而不是对象

可能的解决方案:覆盖 OpenStruct 类的 getter

MyOpenStruct覆盖和的。new_to_h[]OpenStruct

但是压倒一切[]并没有任何区别。例如

只有当我使用[]哈希访问密钥时才会返回!

我该如何纠正这个?

0 投票
1 回答
256 浏览

ruby-on-rails - OpenStruct 如何存储在会话中

我有一些控制器。在这个控制器中,我得到 OpenStruct 对象并希望将其保存到应用程序会话中。下一个代码工作正常:

p session[:info]在此行打印之后

但在此之后,我确实重定向到另一个控制器,当我p session[:info]在这个控制器中写入时,我得到

那么,为什么我会得到这个,以及如何加载正确的 OpenStruct 实例?