Проблема с HomeController, показывающая неопределенный метод - PullRequest
1 голос
/ 23 апреля 2020

Я пытаюсь передать сохраненные_продукты из shopify в приложение Rails, но продолжаю получать ошибку домашнего контроллера на https://f588240c.ngrok.io/ Я сделал обновления, но безуспешно и несколько раз перезагружал сервер без удачи.

enter image description here

Любая помощь будет приветствоваться. Вот код

class Api::V1::HomeController < ShopifyApp::AuthenticatedController
def index
@products = ShopifyAPI::Product.find(:all, params: { limit: 10 })

@products.each do |product|
      StoredProduct.where(shopify_id: product.id)
      .first_or_create do |stored_product|
        stored_product.shopify_id = product.id
        stored_product.shopify_title = product.title
        stored_product.shopify_handle = product.handle
        stored_product.shopify_image_url = product.image.src
        stored_product.shop_id = @shop.id
        stored_product.save

        product.images.each do |image|
          ProductImage.where(shopify_id: image.id)
            .first_or_create do |product_image|
              product_image.image_url = image.src
              product_image.stored_product_id = stored_product_id
              product_image.shopify_id = image.id
          end
        end

      end
    end
  @stored_products = StoredProduct.belongs_to_shop(@shop.id)
  end
end

Из аутентифицированного контроллера

    private
      def set_shop
        @shop = Shop.find_by(id: session[:shopify])
        set_locale
      end

из файла store_products.rb

class StoredProduct < ApplicationRecord
  belongs_to :shop
  has_many :product_images

  scope :belongs_to_shop, -> shop_id { where(shop_id: shop_id) }
end

1 Ответ

0 голосов
/ 23 апреля 2020

Проблема в том, что @shop равен нулю. В сообщении об ошибке говорится, что он не может вызвать метод .id в NilClass.

На рисунке я вижу, что у вас есть shop_id в параметрах, поэтому вам, возможно, просто нужно изменить код здесь:

def set_shop
        @shop = Shop.find_by(id: params[:shop_id])
        set_locale
      end

Но это зависит от вашего кода, поэтому, пожалуйста, проверьте еще раз.

...