2

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 は、予想どおり、メインの会場配列内にvenue_images のオブジェクトの配列を提供しています。

会場画像オブジェクトは次のようになります。

#<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
}

これらは JS ビューでは使用できないため、Paperclip/S3 ヘルパー (つまり、.image.url(:medium)) を呼び出すことができるように、jbuilder コードで何らかの方法で会場の画像を反復処理する必要があります。paperclip オブジェクトの他のすべてのプロパティではなく、これらの URL を @venues 配列に取得する必要があるため、JS でそれらを反復処理してビューに表示できます。

これを行う最善の方法は何ですか?いくつかの異なるブロックを試し、jbuilder wiki といくつかの記事を見ましたが、何も機能しません。

ありがとう

4

1 に答える 1

2

私があなたを正しく理解しているなら、これはあなたが念頭に置いていたことですか?

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.
  ]
}
于 2014-05-20T06:26:47.063 に答える