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
在我的模特中,每个'Venue'都有很多'Venue_Images'。正如预期的那样,上面的JSON为主场馆阵列中的venue_images提供了一系列对象。
venue_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数组而不是paperclip对象的所有其他属性,所以我可以在JS中迭代它们并在我的视图中显示它们。
最好的方法是什么?我已经尝试了几个不同的块并查看了jbuilder wiki和一些文章,但无法获得任何工作。
由于
答案 0 :(得分: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.
]
}