Rails获取图像as_json调用的完整路径

时间:2018-12-10 10:07:54

标签: ruby-on-rails json api carrierwave

我有汽车模型和图片模型。汽车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

时,它可以在控制台上运行

0 个答案:

没有答案