NameError:Sinatra中未初始化的常量Roar :: JSON

时间:2014-11-03 09:13:53

标签: ruby sinatra rails-roar

我在Ruby / Sinatra中构建应用程序,我想在其中使用Roar for JSON(和Hal)输出。目前我遇到了咆哮问题。

安装了这些宝石:

Using i18n 0.6.11
Using json 1.8.1
Using minitest 5.4.2
Using thread_safe 0.3.4
Using tzinfo 1.2.2
Using activesupport 4.1.7
Using builder 3.2.2
Using activemodel 4.1.7
Using arel 5.0.1.20140414130214
Using activerecord 4.1.7
Using backports 3.6.3
Using bond 0.5.1
Using mini_portile 0.6.0
Using multi_json 1.10.1
Using nokogiri 1.6.3.1
Using rack 1.5.2
Using rack-protection 1.5.3
Using rack-test 0.6.2
Using uber 0.0.10
Using representable 1.8.5
Using ripl 0.7.1
Using ripl-multi_line 0.3.1
Using ripl-rack 0.2.1
Using roar 0.12.9
Using tilt 1.4.1
Using sinatra 1.4.5
Using sinatra-contrib 1.4.2
Using roar-sinatra 0.0.1
Using shotgun 0.9
Using sinatra-activerecord 2.0.3
Using sqlite3 1.3.10
Using tux 0.3.0
Using bundler 1.7.4

这是我的app.rb

require "sinatra"
require "sinatra/activerecord"
require "roar-sinatra"
require 'roar/representer/json'
require 'roar/representer/json/hal'

set :database, "sqlite3:todolist.db"

module TodoRepresenter
  include Roar::JSON

  property :title
end

但是当我启动我的应用程序时,我得到以下内容:

app.rb:11:在`':未初始化的常量Roar :: JSON(NameError)

我无法找到解决方法。

这是我使用它的课程:

class Todo < ActiveRecord::Base
    validates :title, presence: true, length: { minimum: 3 }
    validates :body, presence: true

    todo.extend(TodoRepresenter)
    todo.to_json 
end

1 个答案:

答案 0 :(得分:0)

我找到了答案。首先,使用单引号或双引号,而不是两者。

我要求:

require 'sinatra'
require 'sinatra/activerecord'
require 'sinatra/base'
require 'roar-sinatra'
require 'roar/representer/json'
require 'roar/representer/json/hal'

创建一个模块(Class + Representer的标题):

module TodoRepresenter
   include Roar::Representer::JSON

   property :title
end

并在路线中使用它:

get '/todos/:id' do
   Todo.find(params[:id]).extend(TodoRepresenter)
   @todo = Todo.find(params[:id])
   @title = @todo.title.to_json
   puts @title
   erb :'todos/show'
end

在我的控制台中,我现在确实得到了@title。