Таблица не существует при настройке нового приложения с приложением, смонтированным на винограднике - PullRequest
0 голосов
/ 03 октября 2018

Я установил виноградный драгоценный камень поверх существующего приложения и в сохраненных связанных с API виноградных изменениях в каталоге

app >> controller >> api

.(который загружается автоматически. Код для автозагрузки не написан)

И в этом у меня есть код, подобный извлечению значений из таблицы базы данных.

module API
  module V1
    class Users < Grape::API
      include API::V1::Defaults

      resource :users do

        desc 'Creates a User'
        params do
          requires :role_id,
            type: Integer,
            values: Role.all.collect { |role| role.id },
            desc: 'Role ID'

Здесь Role.all вызывается при установкедо нового приложения, которого еще нет.

Но при настройке нового приложения, когда я запускаю "rake db: migrate", выдает ошибку "Таблица не существует".

Какможно ли остановить автоматическую загрузку папки "api" внутри контроллера при настройке нового приложения, чтобы оно не вызывалось.

Или как мне справиться с описанным выше сценарием.

& application.rb файл, где определен виноград

module Api
  class Application < Rails::Application
    config.middleware.use Rack::Cors do
      allow do
        origins '*'
        resource '*', headers: :any, methods: [:get,
          :post, :put, :delete, :options]
      end
    end
  end
end

Заранее спасибо.

1 Ответ

0 голосов
/ 04 октября 2018

Вышеупомянутая проблема была решена с помощью отложенной оценки значений.

Используется proc для значений винограда

Опция: values ​​также может поставляться сProc, вычисляемый лениво с каждым запросом.

и переформатированный код будут такими, как показано ниже

module API
  module V1
    class Users < Grape::API
      include API::V1::Defaults

      resource :users do

        desc 'Creates a User'
        params do
          requires :role_id,
            type: Integer,
            values: -> { Role.all.collect { |role| role.id } },
            desc: 'Role ID'

Мы также можем использовать методы класса внутри proc для ускорения запроса.

...