Как я могу получить URL-адрес изображения скрепки в элементе данных json? - PullRequest
0 голосов
/ 25 декабря 2018

Я собираюсь показать данные JSON, у меня есть две модели: 1) элемент, 2) изображение, для модели изображения - вложение peperclip gem.вместо «image_id»: 6, в данных json я хочу отобразить url изображения

в контроллере items_controller.rb

class V1::ItemsController < ApplicationController

    skip_before_action :verify_authenticity_token

    def index
        items = Item.all
        render json: { status: 'success', data: items, status: :ok}



    end


    def show
        item = Item.find(params[:id])
        render json: {status: 'success', data:item, status: :ok}
    end


    private def image_params
       params.permit(:name,:price,:category_id,:image_id,:short_description,:long_description,:is_active,:preparation_time,:serves,:calorie_count,:meal_type_id,:cuisine_id,:spicy_level ,:is_new,:is_bestseller)
    end

end 

в images_controller.rb

class V1::ImagesController < ApplicationController

    skip_before_action :verify_authenticity_token



    def show
        image = Image.find(params[:id])
        render json: {status: 'success', data:image},status: :ok
    end


    def create
        image = Image.new(image_params)
        if image.save
            render json: {status: 'success', data:image},status: :ok    
        else
            render json: {status: 'error', message:'image not saved', data:image.errors},status: :unprocessable_entity  
        end 
    end


    def destroy
        image = Image.find(params[:id])
        image.destory
        render json: {status: 'success', data:image},status: :ok    
    end

    private def image_params
        params.permit(:item_image,:title,:filename)
    end

end

модель

item.rb

class Item < ApplicationRecord

    has_many :images, dependent: :destroy

end

image.rb

 class Image < ApplicationRecord

    has_attached_file :item_image, styles: { medium: "300x300>", thumb: "100x100>" }, default_url: "/images/:style/missing.png"
    validates_attachment_content_type :item_image, content_type: /\Aimage\/.*\z/

    belongs_to :item
end

теперь я получаю вывод json для элемента

  {
            "id": 1,
            "name": "Bruschette with Tomato",
            "price": 0,
            "category_id": 10,
            "image_id": 6,
            "short_description": "ut error",
            "long_description": "placeat sit quasi dolorum quia vel consequatur",
            "is_active": true,
            "preparation_time": "2018-12-25 19:30:09 +0530",
            "serves": 1545640612,
            "calorie_count": 465,
            "meal_type_id": 4,
            "cuisine_id": 5,
            "spicy_level": 1,
            "is_new": false,
            "is_bestseller": false,
            "updated_at": "2018-12-25T07:10:16.144Z",
            "created_at": "2018-12-25T07:10:16.144Z"
        }

.но вместо "image_id": 6, я хочу отобразить URL-адрес изображения, как я могу сделать, пожалуйста, нужна помощь ......

1 Ответ

0 голосов
/ 26 декабря 2018

В соответствии с предоставленной ассоциацией, т.е. item has_many images и images own_to item, ссылка на таблицу элементов primary_key должна быть в таблице изображений, а не на таблицу images primary_key в таблице элементов.

Найти все изображенияэлемент, использующий активную ассоциацию записей:

@item = Item.find_by(id: params[:id])
@images = @item&.images

Вместо того, чтобы возвращать json из действия, верните его из представления jbuilder.Итерируйте массив изображений, чтобы найти и вернуть соответствующий путь изображения под объектом item.

https://github.com/rails/jbuilder

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...