Jbuilder построить многомерный массив

Код JBuilder:

json.array!(@venues) do |venue|
  json.extract! venue, :id, :name, :longitude, :latitude, :price_range, :venue_category_id, :venue_images, :address, :short_description, :max_capacity
end

В моих моделях каждое «место проведения» имеет_много «место проведения_изображений». Как и ожидалось, приведенный выше JSON дает мне массив объектов для Venet_images в основном массиве площадок.

Объекты Venet_image выглядят следующим образом:

#<Item:0x007fc97559b960> {
                    :id => 1,
    :image_content_type => "image/jpeg",
       :image_file_name => "chanel.jpg",
       :image_file_size => 28880,
      :image_updated_at => 2012-04-09 21:00:08 UTC
}

Мне нужно каким-то образом перебрать изображения мест проведения в коде jbuilder, чтобы я мог вызывать на них помощники Paperclip/S3 (т.е. .image.url(:medium)), поскольку они недоступны в представлении JS. Мне нужно получить эти URL-адреса в массиве @venues, а не во всех других свойствах объекта скрепки, чтобы я мог перебирать их в JS и отображать в своем представлении.

Как лучше всего это сделать? Я пробовал несколько разных блоков и просмотрел вики jbuilder и пару статей, но ничего не могу заставить работать.

Спасибо


person Ralph King    schedule 19.05.2014    source источник


Ответы (1)


Если я правильно вас понял, вы имели в виду:

json.array!(@venues) do |venue|
  json.extract! venue, :id, :name, :longitude, :latitude, :price_range, :venue_category_id, :address, :short_description, :max_capacity

  json.venue_images venue.venue_images do |vi|
    json.url vi.image.url(:medium))
    json.id vi.id
    json.image_content_type "image/jpeg"
    json.image_file_name "chanel.jpg"
    json.image_file_size 28880
    json.image_updated_at "2012-04-09 21:00:08 UTC"
  end
end

Это должно дать вам хэш JSON следующим образом:

"venue": {
  "id": 1,
  "name": "Foo",
  "longitude": "180 degrees",
  "latitude": "90 degrees",
  "price_range": "100-200",
  "venue_category_id": 2,
  "address": "500 Poop Lane",
  "short_description": "Blah blah, foo foo",
  "max_capacity": 500,

  "venue_images": [
    {
      "url": "http://poop.com",
      "id": 5,
      "image_content_type": "image/jpeg",
      "image_file_name": "chanel.jpg",
      "image_file_size": 28880,
      "image_updated_at": "2012-04-09 21:00:08 UTC" 
    },
    etc.
  ]
}
person vich    schedule 20.05.2014
comment
Спасибо, позвольте мне попробовать это сегодня утром и вернуться к вам! - person Ralph King; 20.05.2014