我已经将葡萄宝石安装在现有应用程序上,并且将葡萄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
谢谢。
答案 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内部使用类方法来固定查询。