I've defined two methods in Model image_url
& thumb_url
to get absolute url
of images and thumbs
and calling them in controller .to_json()
method.
when I view the Json
response it only shows image_url
not the thumb_url
please guide me what I am doing wrong here.
Model :
class Post < ActiveRecord::Base
include Rails.application.routes.url_helpers
validates :image, presence: true
has_attached_file :image, styles: { :medium => "640x", thumb: "100x100#" } # # means crop the image
validates_attachment_content_type :image, :content_type => /\Aimage\/.*\Z/
def image_url
relative_path = image.url(:medium)
self.add_host_prefix relative_path
end
def thumb_url
relative_path = image.url(:thumb)
self.add_host_prefix relative_path
end
def add_host_prefix(url)
URI.join(root_url, url).to_s
end
end
controller :
class Api::ImagesController < ApplicationController
def index
@posts = Post.all.order(id: :desc)
paginated_records = @posts.paginate(:page => params[:page], :per_page => params[:per_page])
@posts = with_pagination_info( paginated_records )
render :json => @posts.to_json(:methods => [:thumb_url], :methods =>[:image_url])
end
end
here is My Json Response:
"data": [{
"id": 23,
"caption": "World Top View",
"created_at": "2015-09-17T14:10:57.278Z",
"updated_at": "2015-09-17T14:10:57.278Z",
"image_file_name": "world.topo.bathy.200401.3x21600x10800.jpg",
"image_content_type": "image/jpeg",
"image_file_size": 29698041,
"image_updated_at": "2015-09-17T14:10:36.975Z",
"image_url": "http://localhost:3000/system/posts/images/000/000/023/medium/world.topo.bathy.200401.3x21600x10800.jpg?1442499036"}
You can't pass two :methods
keys into the hash, only the last key will be used. Remember that a key for a hash has to be unique. If you want mulitiple methods, you should do...
render :json => @posts.to_json(:methods => [:thumb_url, :image_url])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With