Rails 5 Цепочка фильтров остановлена ​​как: ошибка отрисовки set_product или перенаправленная ошибка при индексации всех продуктов - PullRequest
0 голосов
/ 28 мая 2019

Я запускаю приложение Rails api-only с моделью продукта. Я создал продукты на бэкэнде с помощью activeadmin. При использовании почтальона для просмотра отдельных продуктов с соответствующим идентификатором продукта он возвращает данные json в порядке, но когда я пытаюсь просмотреть весь продукт по адресу: api / v1 / products

Я получаю эту ошибку:

Запущен GET "/ api / v1 / products /" для :: 1 в 2019-05-28 11:12:47 +0100 Обработка Api :: V1 :: ProductsController # index как JSON Параметры: {"product" => {}} Цепочка фильтров остановлена ​​как: set_product отрендерено или перенаправлено Завершено 404 Не найдено за 5 мс (Просмотры: 0,2 мс | ActiveRecord: 4,9 мс)

Вот мой контроллер:

module Api
  module V1
    class ProductsController < Api::V1::ApiController
      # do not authenticate users before viewing product listing or individual products
      before_action :authenticate_user!, except: %i[index show]
      before_action :set_product, only: %i[index show]

      # GET /product
      def index
        product = Product.all.order('id')
        render json: { success: true, data: product }, status: :ok
      end

      # GET /products/:id
      def show
        @product = Product.find(params[:id])
        render json: { success: true, data: @products }, status: :ok
      end

      private

      def set_product
        @products = Product.find(params[:id])
        rescue StandardError => error
        render json: { success: false, error: error }, status: 404
      end

      def product_params
        params.require(:product).permit(:title, :release_date, :release_time, :description, :price, :brand)
      end

    end
  end
end

Вот мои взгляды API:

_product.json.jbuilder

json.id               product.id
json.title            product.title
json.description      product.description
json.release_date     product.release_date
json.release_time     product.release_time
json.price            product.price
json.brand            product.brand

index.json.jbuilder

json.array! @products, partial: 'products/product', as: :product

show.json.jbuilder

json.product do
  json.partial! 'product' 
end

1032 * маршруты *

namespace :api do
    namespace :v1, defaults: { format: :json } do
      devise_scope :user do
        get :status, to: 'api#status'
        resource :user, only: %i[update show] do
          get :profile
        end
      end
      resources :products, only: [:index, :show]
    end

  end

1 Ответ

1 голос
/ 28 мая 2019

конвертировать

module Api
  module V1
    class ProductsController < Api::V1::ApiController
      # do not authenticate users before viewing product listing or individual products
      before_action :authenticate_user!, except: %i[index show]
      before_action :set_product, only: %i[index show]

      # GET /product
      def index
        product = Product.all.order('id')
        render json: { success: true, data: product }, status: :ok
      end

      # GET /products/:id
      def show
        @product = Product.find(params[:id])
        render json: { success: true, data: @products }, status: :ok
      end

      private

      def set_product
        @products = Product.find(params[:id])
        rescue StandardError => error
        render json: { success: false, error: error }, status: 404
      end

      def product_params
        params.require(:product).permit(:title, :release_date, :release_time, :description, :price, :brand)
      end

    end
  end
end

в

module Api
  module V1
    class ProductsController < Api::V1::ApiController
      # do not authenticate users before viewing product listing or individual products
      before_action :authenticate_user!, except: %i[index show]
      before_action :set_product, only: %i[show]

      # GET /product
      def index
        @products = Product.all.order('id')
        render json: { success: true, data: @products }, status: :ok
      end

      # GET /products/:id
      def show
        if @product.present?
          render json: { success: true, data: @product }, status: :ok
        else
           render json: { success: false }, status: :not_found
        end

      end

      private

      def set_product
        @product = Product.find(params[:id])
      end

      def product_params
        params.require(:product).permit(:title, :release_date, :release_time, :description, :price, :brand)
      end

    end
  end
end
...