【发布时间】:2020-07-25 09:44:50
【问题描述】:
我在构建一个小 Ruby on Rails 时遇到问题,需要一些帮助。 我有一个包含 20 多个列的表和一个相应的 XML 文件,可以用 gem 将其解析为某种散列。每个键都将映射到一个列,每个值都将是该列中的一条数据记录。
我在已解析的 XML 文件中访问特定值的方式是:
filename["crs","inputkeyhere"]
返回值,例如“52”或其他。
我要做的是上传文件,用 gem 解析它并为每一列赋予相应的值。
我的表(或模型)被称为“属性集”,我已经知道如何访问每一列:
@attributeset = Attributeset.new
@attributeset.attributes.keys
所以我的想法是:
- 遍历所有键
- 将每个键传递到一个名为 |a| 的块中
- 通过调用相应的@attributeset 来使用rails possibilty 设置属性。
- 将colum属性设置为对应的xml键
所以我的代码会是这样的:
@attributeset.attributes.keys.each do |a|
@attributeset.a=filename["crs",a]
end
但我的问题是,ruby 认为“.a”是一种方法,并且显然不会将“a”评估为块参数。 我已经阅读了 lambdas 和 procs 之类的东西,但并没有真正理解它们如何适用于我的具体情况。
来自 bash 脚本可能我的想法可能是错误的,但我认为 .a 可能会被评估。 我知道我可以使用 yield 运行该块,但这仅适用于我所知道的方法..
感谢任何帮助。 感谢并保持健康, 亚历克斯
【问题讨论】:
-
你可以试试
@attributeset.public_send("#{a}=", filename["crs",a])吗?使用public_send,您可以从传递参数的对象调用方法
标签: ruby-on-rails ruby