2015-07-19 64 views
0

我正在使用Ruby,Sinatra和MongoDB创建一个CRUD API。我不断收到以下错误消息,我无法找出我做错了:Sinatra:为什么这是一个语法错误?

SyntaxError: /yasi.rb:6: syntax error, unexpected =>, expecting '}' Yasi.connect {:server => "localhost", :db => "yasi"}^/yasi.rb:6: syntax error, unexpected ',', expecting '}' Yasi.connect {:server => "localhost", :db => "yasi"} ^

这里是我的代码如下所示:

require 'rubygems' 
require 'sinatra' 
require 'lib/yasi' 

before do 
    Yasi.connect {:server => "localhost", :db => "yasi"} 
end 

get "/" do 
    @yasis = Yasi.find :all 
    erb :index 
end 

get "/new" do 
    erb :new 
end 

get "/delete/:id" do 
    Yasi.delete(params[:id]) 
    redirect "/" 
end 

post "/" do 
    params.reject! {|k,v| k == "submit"} 
    Yasi.save(params) 
    redirect "/" 
end 

这里的lib /雅思文件:

require 'rubygems' 
require 'mongo' 
require 'sinatra' 

module Yasi 
    class << self 

def connect(config) 
    @db = Mongo::Connection.new(config[:server],config[:port] || 27017).db(config[:db]) 
end 

def find(search) 
    if search == :all 
    #return all 
    yasi = @db.collection("yasis").find.to_a 
    return nil_or_array(yasi) 
    else 
    return find_with_criteria(search) 
    end 
end 

def save(yasi) 
    stringify_keys(yasi) 
    #handle author first 
    if yasi["author"] 
     stringify_keys(yasi["author"]) 
    author = @db.collection("authors").find_one(yasi["author"]) 
    unless author 
     author = @db.collection("authors").save(yasi["author"]) 
    end 
    yasi["author"] = author 
    end 

    @db.collection("yasis").save(yasi)  
end 

def delete(id) 
    victim = @db.collection("yasis").find_one(Mongo::ObjectID.from_stringid)) 
    @db.collection("yasis").remove(victim) if victim 
end  


private 

def find_with_criteria(search) 
    stringify_keys(search) 
    if search["author"] 
    author = @db.collection("authors").find_one stringify_keys(search["author"]) 
    if author 
     search[:author] = author 
     yasi = @db.collection("yasis").find(search).to_a 
     return nil_or_array yasi 
    else 
     nil 
    end 
    else 
    yasi = @db.collection("yasis").find(search).to_a 
    return nil_or_array(yasi) 
    end  
end 

def stringify_keys(hash) 
    hash.each_key do |key| 
    hash[key.to_s] = hash.delete(key) 
    end 
    hash 
end 

def nil_or_array(result) 
    if result.size == 0 
    return nil 
    else 
    return result 
    end 
    end 

end  
end 
+0

你介意在这里粘贴'lib/yasi'文件吗? – vikram7

+0

我不认为这会导致问题,但肯定。 –

回答

1

夫妇的事情。确保您正在访问​​正确的路径。此外,传递变量引用您的哈希值作为configYasi.connect象下面这样:

require './lib/yasi' 

before do 
    config = { :server => "localhost", :db => "yasi" } 
    Yasi.connect config 
end 

应该处理您发布有关错误的,但我也仔细检查您的压痕在雅思文件,以使其更容易排查。

+0

这工作,但现在我得到这个错误:未初始化的常量Mongo ::连接 –

+0

你有'mongo'本地安装? – vikram7

+0

是的,它已安装。 –