问题标签 [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.
ruby-on-rails - Ruby on Rails 字符串到 OpenStruct
我有以下 OpenStruct 对象,但如果我调用 .class 它是一个字符串。如何将其转回 OpenStruct 对象?
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
ruby - 将 JSON 字符串解析为具有属性的对象
目前我的应用程序正在以下列方式解析 JSON:
但这种方法存在问题:
- JSON 允许根级数
[{id: 1, name: "first"}, {id: 2, name: "second"}]
组,而 OpenStruct 无法处理它们引发异常。 - OpenStruct 不处理嵌套元素。
我找到了一些解决方案,例如 RecursiveOpenStruct 等。
- 他们处理嵌套哈希,但仍然无法处理顶级数组
- 嵌套到数组中的散列仍然是散列:
{data: [{id: 1, name: "first"}, {id: 2, name: "second"}]}
这里每个.data[i]
都是一个散列。
ruby-on-rails - Ruby 和 OpenStruct 只允许访问一些数据
我有一组 OpenStruct 数据结构。但是当我尝试访问它们时,我只能访问country
例如
返回所有国家,但如果我这样做
很多空行被返回。
ruby - 在 Ruby Openstruct 中验证键/值的存在/有效性
是否有标准方法来验证 Ruby 的 Openstruct 中的键/值(是否存在键,是否为有效值)?在纯 Ruby 中,没有 Rails/Sinatra,但与 ActiveRecord 或 ActiveModel::Validations 中的验证类似。例如,要检查 Openstruct 是否包含“id”键,请检查“名称”键的值是否不超过 X 个字符,检查“协议”键的值是否仅包含特定值,例如“tcp”,而不包含“abc” , ETC。
ruby-on-rails - 分组哈希中的唯一对象
我有一个由.group_by
方法创建的散列,其中字符串作为键,AR 对象作为值。而且我想摆脱带有重复字段的 AR 对象(其他字段可能相同也可能不同)。
为了澄清我创建了这个片段的问题:
grouped_hash
这是:
现在,结果我想要一个哈希,fid
每个键都有唯一的 s:
我的解决方案需要几个动作并且看起来很丑。
我正在寻找最优雅(可能是 1-liner)和最有效的方式(没有哈希重新创建)。
ruby - 从 YAML 创建嵌套对象以通过 Ruby 中的方法调用访问属性
我对红宝石完全陌生。我必须解析一个 YAML 文件来构造一个对象
YAML 文件
我想从此 YAML 创建一个对象,为此我用 Ruby 编写了以下代码
我可以使用 [] 成功访问该对象的属性,例如
但是,我想通过方法调用访问属性
例如
有没有办法构造这样一个对象,其属性可以通过上述(点)方式访问?我读过OpenStruct和hashugar。我也想避免使用第三方宝石
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则填充
ruby - 覆盖 OpenStruct 的 getter 以便将其打印为 Hash
目标:OpenStruct 对象的值应打印为散列而不是对象
可能的解决方案:覆盖 OpenStruct 类的 getter
MyOpenStruct
覆盖和的。new
_to_h
[]
OpenStruct
但是压倒一切[]
并没有任何区别。例如
只有当我使用[]
哈希访问密钥时才会返回!
我该如何纠正这个?
ruby-on-rails - OpenStruct 如何存储在会话中
我有一些控制器。在这个控制器中,我得到 OpenStruct 对象并希望将其保存到应用程序会话中。下一个代码工作正常:
p session[:info]
在此行打印之后
但在此之后,我确实重定向到另一个控制器,当我p session[:info]
在这个控制器中写入时,我得到
那么,为什么我会得到这个,以及如何加载正确的 OpenStruct 实例?