使用葡萄安装的应用程序设置新应用程序时,表不存在

时间:2018-10-03 04:47:19

标签: ruby-on-rails autoload migrate grape-api

我已经将葡萄宝石安装在现有应用程序上,并且将葡萄api的相关更改保留在

  

app >>控制器>> 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 :(得分:0)

使用值的惰性评估解决了上述问题。

用于grape values的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内部使用类方法来固定查询。