rails не загружает все атрибуты в JSON - PullRequest
0 голосов
/ 06 ноября 2018

Я использую Rails в качестве бэкэнда и React в качестве внешнего интерфейса.

Я загружаю фотографии блюд через Carrierwave в мое AWS S3 ведро .

Когда я это делаю, вот что я получаю от консоли рельсов:

m = Meal.first
[...]
m.photo
=> #<PhotoUploader:0x007fef8e4381b0 @model=#<Meal id: 1, name: "Burger Caviar", price: "5.99", original_price: "8.90", description: "Delicieux Burger, parfume au caviar d'aubergine et...", ingredients: "Pain, steack de boeuf, caviar, salade, tomates, oi...", allergenes: "aucun", category: "Français", week_day: 1, photo: "Photo_May_21_11_45_12_PM_1024x1024.jpg", vacation_mode: false, restaurant_id: 1, created_at: "2018-11-06 13:00:46", updated_at: "2018-11-06 13:00:46">, @mounted_as=:photo, @file=#<CarrierWave::Storage::Fog::File:0x007fef8e433c50 @uploader=#<PhotoUploader:0x007fef8e4381b0 ...>, @base=#<CarrierWave::Storage::Fog:0x007fef8e433ea8 @uploader=#<PhotoUploader:0x007fef8e4381b0 ...>>, @path="uploads/Photo_May_21_11_45_12_PM_1024x1024.jpg", @content_type=nil>, @filename=nil, @cache_id=nil, @versions={}, @storage=#<CarrierWave::Storage::Fog:0x007fef8e433ea8 @uploader=#<PhotoUploader:0x007fef8e4381b0 ...>>>

m.photo.path
=> "uploads/Photo_May_21_11_45_12_PM_1024x1024.jpg"

m.photo.url
=> "https://take-a-meal-images.s3.amazonaws.com/uploads/Photo_May_21_11_45_12_PM_1024x1024.jpg"

Мне на самом деле нужно m.photo.path, чтобы передать свое изображение (через imgix ) клиенту в React. Однако, когда я звоню по телефону через axios и console.log в ответ, все, что я получаю, это URL фотографии:

data: Array(9)
[...]
0:
  created_at: "2018-11-06T14:00:49.373+01:00"
  id: 10
  name: "Burger Nordiste"
  photo:
      url: "https://take-a-meal-images.s3.amazonaws.com/uploads/header-image.jpg"
[...]

Мой controllers/meals_controller.rb:

class MealsController < ApplicationController
  def index
    @meals = Meal.all
    render json: @meals.to_json(include: :restaurant)
  end
end

так почему рельсы служат только photo.url и как я могу изменить это, чтобы получить доступ к photo.path в React?

1 Ответ

0 голосов
/ 06 ноября 2018

Самым простым решением переопределить сериализатор по умолчанию для загрузчика является перегрузка метода serializable_hash внутри загрузчика.

Если это перегрузка, которую нужно применять часто, я бы порекомендовал создать модуль / задачу, чтобы избежать дублирования.

# app/uploaders/photo_uploader.rb
class PhotoUploader < CarrierWave::Uploader::Base
  # existing code...

  def serializable_hash(*args)
    super(*args).merge({'path': path})
  end
end
...