Рабл Мультимодельная коллекция - PullRequest
6 голосов
/ 30 ноября 2011

Я использую RABL для вывода набора результатов Sunspot / SOLR, а объект результатов поиска состоит из нескольких типов моделей. В настоящее время в представлении Rabl у меня есть:

object false

child @search.results => :results do
  attribute :id, :resource, :upccode
  attribute :display_description => :description

  code :start_date do |r|
    r.utc_start_date.to_i
  end

  code :end_date do |r|
    r.utc_end_date.to_i
  end

end

child @search => :stats do
  attribute :total
end

Вышесказанное работает для одной модели; однако, когда в коллекции @ search.results находятся несколько типов моделей, происходит сбой, поскольку оба класса не имеют одинаковых методов экземпляра. Кто-нибудь знает, как иметь разные атрибуты в зависимости от типа? В конечном счете, было бы неплохо условно расширить другой шаблон в коллекции результатов в зависимости от типа объекта. Что-то вроде приведенного ниже псевдокода:

child @search.results => :results do |r|
  if r.class == Product
    extends "product/base"
  else
    extends "some other class base"
  end
end

1 Ответ

7 голосов
/ 30 ноября 2011

Вы можете получить полный контроль над «узлом» и полностью избежать этой проблемы в «худшем» случае:

node :results do
  @search.results.map do |r|
    if r.is_a?(Product)
      partial("product/base", :object => r)
    else # render other base class
      partial("other/base", :object => r)
    end
  end
end

Помогает ли это?

...