Как динамически выбрать поле для возврата в Rails - PullRequest
1 голос
/ 03 февраля 2011

У меня есть приложение Ruby on Rails, и я хотел бы иметь возможность динамически выбирать, какое поле возвращать в базу данных.Вот что я имею в виду:

Предположим, у меня есть таблица базы данных с именем Dog, и в этой таблице есть поля "id", "name", "color".

Если я хочу получить dog #7s имя, я мог бы просто сделать:

d = Dog.find(7)
the_output = d.name

Однако, что я хочу сделать, это динамически выбрать, какое поле вернуть для собаки # 7.Итак, предположим, что я определил:

the_field = "name"

Я хочу иметь возможность сделать что-то вроде вызова:

d.(the_field)

и заставить его вернуть имя собаки.(Я использую скобки здесь, потому что в MATLAB вы можете сделать это таким образом (и я делаю все время), и это работает, но это не работает в Rails.) Очевидное преимущество этого состоит в том, что я могу тогда где-то еще впрограмма установила the_field = "color" и мой тот же код возвращает цвет собаки вместо имени.

Я пытался сделать это:

Dog.find(d.id, :select=>the_field)

, но это возвращает объект Dog, а непросто строка, содержащая имя собаки.А поскольку в коде я не знаю, какое поле вызывается, я не уверен, как извлечь только строку, содержащую поле, которое мне нужно.

Так что, надеюсь, все это имело смысл, инадеюсь, какой-нибудь добрый человек знает, как это сделать.

Спасибо!

Q

Ответы [ 2 ]

1 голос
/ 03 февраля 2011

Как насчет этого?

class Dog < ActiveRecord::Base
  def self.query_field(id, field)
    find(id).send(field)
  end
end

field = :name
Dog.query_field(7, field) # "Roscoe"
field = :color
Dog.query_field(7, field) # "brown"
0 голосов
/ 08 ноября 2018

Для рельсов активных объектов записи вы можете сделать:

field = :name
d = Dog.find(7)
d[field]

Вы для целой группы объектов можете сделать

field = :name
Dog.where(some_sql_query).pluck(field)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...