Можете ли вы использовать переменные для ссылки на столбцы таблицы в Rails? - PullRequest
1 голос
/ 14 апреля 2011

Допустим, у меня есть таблица, которую я пытаюсь преобразовать.У него есть имена столбцов 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, который не существует.

Я пару раз сталкивался с этой проблемой в различных проектах, есть мысли?

Ответы [ 3 ]

3 голосов
/ 14 апреля 2011

order.send item_ref;Кроме того, используйте 25.times do |i| (начинается с 0) или (1..25).each do |i| вместо собственного цикла.

1 голос
/ 14 апреля 2011

Я бы не советовал вам использовать этот вид дизайна, но ... в любом случае ... вы можете делать то, что вы пытаетесь, используя метод send(). Как в order.send("item + i.to_s") ...

0 голосов
/ 14 апреля 2011

попробуйте это это работает в моем случае

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...