Имитация активной загрузки для не связанных таблиц - PullRequest
0 голосов
/ 17 ноября 2011

У меня есть поле quality_code, которое является произвольным текстом, введенным пользователем.Однако существуют определенные известные коды с более длинным описанием.Если известный код хранится в записи, я хотел бы отобразить описание вместо кода.

У меня есть простой метод на модели, чтобы показать описание, если оно доступно, или введенный код качества_кодаесли нет, но это относится к типичному шаблону n + 1 запросов, необходимых для составления списка из n элементов:

def view_quality_code
  if (code = QualityCode.find_by_quality_code(quality_code)).nil?
    quality_code
  else
    code.description
  end
end

Если бы модели были фактически связаны (belongs_to :quality_code), то я бы разобралсядобавив includes(:quality_code) к запросу, чтобы он просто сделал один дополнительный запрос к таблице quality_code.

Есть ли простой способ сделать то же самое без привязки моделей?

1 Ответ

1 голос
/ 17 ноября 2011

Не зная, как называется ваша другая модель, я притворюсь, что это «Виджет». Предполагая, что у вас есть массив виджетов, например:

widgets = Widget.all

Вы можете подделать энергичную загрузку себя так:

@codes = QualityCode.where(:quality_code => widgets.map(&:quality_code).uniq).group_by(&:quality_code) 

def view_quality_code
  if codes = @codes[quality_code]
    codes[0].description
  else
    quality_code
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...