Рельсы ActiveRecord: выберите с определенным заказом - PullRequest
0 голосов
/ 16 сентября 2011

У меня такой запрос

order_id = 4
Order.find(order_id, :select => 'orders.root_id, orders.lft, orders.rgt').attributes

, который возвращает что-то вроде

{"lft" => 1, "rgt" => 10, "root_id" => 9}

и нужен массив в следующем порядке: root_id, lft, rgt. Любые советы кто-нибудь?

Ответы [ 4 ]

2 голосов
/ 16 сентября 2011

Здесь легко выполнить преобразование самостоятельно, поскольку вы имеете дело с единственной записью:

order_array = [order.root_id, order.lft, order.rgt]

Более крупный вопрос, вероятно, «Почему?», И ответ, скорее всего, заключается в том, что выделаем неправильно ™.

1 голос
/ 16 сентября 2011
Order.find(order_id, 
           :select => 'orders.root_id, orders.lft, orders.rgt').attributes
          .values_at("root_id", "lft", "rgt")
1 голос
/ 16 сентября 2011
attrs =Order.find(order_id, :select => 'orders.root_id, orders.lft, orders.rgt').attributes
array = [attrs['root_id'], attrs['lft'], attrs['rgt']]

таким образом?

0 голосов
/ 16 сентября 2011

Для заказа вы можете применить sort метод для результата.

h = {"lft" => 1, "rgt" => 10, "root_id" => 9}
h.sort { |x,y| y <=> x }
=> [["root_id", 9], ["rgt", 10], ["lft", 1]]


Order.find(order_id, :select => 'orders.root_id, orders.lft, orders.rgt').attributes.sort { |x,y| y <=> x }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...