在this tutorial之后,我在Rails上创建了现有博客Web应用程序的API。我收到了错误:
未初始化的常量API
这是我的代码:
lib/api/v1/articles.rb
:
module API
module V1
class Articles < Grape::API
version 'v1'
format :json
resource :articles do
desc "Return list of recent posts"
get do
Article.recent.all
end
end
end
end
end
lib/api/v1/root/rb
module API
module V1
class Root < Grape::API
mount API::V1::Articles
end
end
end
lib/api/root.rb
module API
class Root < Grape::API
prefix 'api'
mount API::V1::Root
end
end
lib/tasks/routes.rake
namespace :api do
desc "API Routes"
task :routes => :environment do
API::Root.routes.each do |api|
method = api.route_method.ljust(10)
path = api.route_path.gsub(":version", api.route_version)
puts " #{method} #{path}"
end
end
end
config/routes.rb
Rails.application.routes.draw do
mount API::Root => '/'
get 'welcome/index'
root 'welcome#index'
resources :articles
end
这是现有的Web应用程序代码:
app/controllers/articles_controller.rb
class ArticlesController < ApplicationController
def new
end
def create
# render plain: params[:article].inspect
@article = Article.new(article_params)
@article.save
redirect_to @article
end
def show
@article = Article.find(params[:id])
end
private
def article_params
params.require(:article).permit(:title,:text)
end
end
现在我在本文的Accessing API routes
部分。当我运行rake路由时,它会给出错误,未初始化的常量API ..我做错了什么。
修改:根据评论,提供详细错误
rake aborted!
NameError: Uninitialized constant API
F:/blog/config/routes.rb:2:in 'block in <top (required)>'
F:/blog/config/routes.rb:1:in '<top (required)>'
C:in 'execute_if_updated'
F:/blog/config/environment.rb:5:in '<top (required)>'
Tasks: TOP =>routes =>environment
environment.rb
# Load the Rails application.
require File.expand_path('../application', __FILE__)
# Initialize the Rails application.
Rails.application.initialize!
当我在config / application.rb中插入config.autoload_paths + = Dir [“#{config.root} / lib / ** /”]并运行rake路由时,会出现错误can't convert Symbol into String
升级葡萄版本,我收到了这个错误:
答案 0 :(得分:2)
根据讨论,您需要将您的葡萄宝石的版本更新为0.9.0,然后您需要在Gemfile中添加此行:
gem 'grape', '0.9.0'
然后:
$ bundle install
答案 1 :(得分:1)
从版本0.11.0开始,文档说
滑轨
将API文件放入app / api。 Rails期望一个子目录 匹配Ruby模块的名称和匹配的文件名 班级名称。在我们的示例中,文件名位置和 Twitter :: API的目录应为app / api / twitter / api.rb。
简单的解决方案是创建另一个api文件夹并移动整个文件&amp;进入app / api / api文件夹