可以使用变量来引用 Rails 中的表列吗?

发布于 2024-11-01 08:39:53 字数 668 浏览 1 评论 0原文

假设我有一张要转换的表格。它的列名称为 Item1、Item2...Item25。我无法控制列名称,我正在将其转换为更好的结构。

因为命名约定有一个模式,所以我可以动态创建列名称。问题是,当我尝试使用变量作为对象键时,它会作为文字而不是变量的内容传递。

例如,这是可行的:

if !order.item1.empty?
  OrderItem.create(
  :item => order.item1,
  :quantity => order.qty1,
  :price => order.price1
)

但我不想手工制作 25 个变体,而是想做类似的事情

i = 1
while i < 25
    item_ref = "item" + i.to_s
    if !order.item_ref.empty?
    OrderItem.create(
        :item => order.item_ref,
        etc...)
    i += 1
    end
end

,但这当然行不通。 Rails 尝试查找 order.item_ref 而不是 order.item1,因为 order.item1 不存在。

我在不同的项目中多次遇到这个问题,有什么想法吗?

Let's say I've got a table that I'm trying to convert. Its got column names Item1, Item2... Item25. I don't have control over the column names, I'm converting from this into a better structure.

Because there's a pattern to the naming convention, I can create the column names on the fly. The problem is that when I try to use my variable as an object key, it gets passed through as a literal instead of the contents of the variable.

For instance, this works:

if !order.item1.empty?
  OrderItem.create(
  :item => order.item1,
  :quantity => order.qty1,
  :price => order.price1
)

But rather than make 25 variations of that by hand, I'd like to do something like

i = 1
while i < 25
    item_ref = "item" + i.to_s
    if !order.item_ref.empty?
    OrderItem.create(
        :item => order.item_ref,
        etc...)
    i += 1
    end
end

But of course this doesn't work. Rails tries to look up order.item_ref instead of order.item1, which doesn't exist.

I've hit this issue a couple of times on various projects, any thoughts?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

别在捏我脸啦 2024-11-08 08:39:53

order.send item_ref;另外,使用 25.times do |i| (从 0 开始)或 (1..25).each do |i| 而不是您自己的循环。

order.send item_ref; Also, use 25.times do |i| (starts at 0) or (1..25).each do |i| rather than your own loop.

南街女流氓 2024-11-08 08:39:53

我真的不鼓励您使用这种设计,但是..无论如何..您可以使用 send() 方法来完成您正在尝试的操作。如 order.send("item + i.to_s")...

I really wouldn't encourage you to use this kind of design but.. anyway.. you can do what you're trying using the send() method. As in order.send("item + i.to_s")...

失与倦" 2024-11-08 08:39:53

试试这个
它适用于我的情况

i = 1
while i < 25
  item_ref = "item" + i.to_s
  unless order[item_ref].empty?
    OrderItem.create :item => order.item_ref,:blah blah ...
    i += 1
 end
end

try this
it works in my case

i = 1
while i < 25
  item_ref = "item" + i.to_s
  unless order[item_ref].empty?
    OrderItem.create :item => order.item_ref,:blah blah ...
    i += 1
 end
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文