我有汽车模型和图片模型。汽车has_many :pictures
和图片belongs_to :car
我正在使用Carrierwave保存图片,效果很好。
在构建API时,我想返回图片的完整路径。
我已经如下覆盖了Car模型的as_json方法;
def as_json(options={})
super(:except => [:hourly_price, :hourly_checkin, :hourly_weekend, :max_h_p, :hourly_price_range_id, :created_at, :updated_at, :gid_id],
:include => {
:pictures => {:except => [:id, :name, :created_at, :updated_at, :car_id]})
end
在控制台上,如果我写Car.last.pictures.image_url(:slider).to_s
。这给了我完整的路径。但是当API返回json时,我只能看到图像名称而不是完整路径。
我认为我也需要重写Picture模型中的某些功能。
我已经尝试过了,但是到目前为止还行不通。
pictures.rb
def to_json(options = nil)
params = {id: self.id, name: self.name, car_id: self.car_id, position: self.position, image: self.image.url}
ActiveSupport::JSON.encode(params, options)
end
编辑
我在picture.rb上重写了as_json,如下所示;
def as_json(options={})
super(only: [:id, :name, :car_id, :position],
methods: [:image]
)
end
def image
self.image_url(:slider).to_s
end
但是它给出了错误; NoMethodError (undefined method
image_url'for#):`
但是,当我键入Car.last.pictures.last.image_url(:slider).to_s