rake路由上未初始化的常量API

时间:2014-10-13 07:38:43

标签: ruby-on-rails ruby api

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

enter image description here

升级葡萄版本,我收到了这个错误:

enter image description here

2 个答案:

答案 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文件夹