2014-11-03 4 views
0

Я создаю приложение в Ruby/Sinatra, где я хочу использовать Roar для выхода JSON (и Hal). На данный момент у меня проблемы с Ревом. установленыNameError: uninitialized constant Roar :: JSON in Sinatra

Эти драгоценные камни:

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: in `: uninitialized constant 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 
+0

Возможно, вам следует использовать «Помощники» Roar :: Sinatra' вместо 'include Roar :: JSON' –

+0

Вы пытались добавить' require 'roar/json''? –

+0

@UriAgassi, когда я это делаю, я получаю: /Users/JW/.rbenv/versions/2.1.3/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:126:in 'require ': не могу загрузить такой файл - roar/json (LoadError) – LiveNL

ответ

0

Я нашел ответ. Во-первых, используйте одиночные или двойные кавычки, а не оба.

Я требую:

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

Создать модуль (название класса + МЕНЕДЖЕР):

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.

Смежные вопросы