刚刚进入Ruby世界,并建立了基于Sinatra的API。
这是我的路线定义之一。 not_found在被称为& not_found时起作用,但它给出了'2015-10-23 16:31:59 - NoMethodError - 未定义的方法`状态'用于Sinatra :: FileService :: GetFiles:Module:'当被称为'not_found时。 params ['obsId'])'。
任何人都可以提供任何指示吗?非常感谢!
def self.registered(app)
not_found = -> id = 'undefined' {
status 404
content_type :json
{
:message => settings.messages['get']['404'],
:data => {
id: _id
}
}.to_json
}
found = -> _id {
status 200
content_type :json
{
:message => settings.messages['get']['200'],
:data => {
:id => _id
}
}.to_json
}
app.get '/', ¬_found
app.get '/:obsId' do
if params['obsId'] == '1'
found.( params['obsId'] )
else
not_found.( params['obsId'] )
end
end
end
答案 0 :(得分:1)
所以看来这是一个范围问题。看起来当你用默认的param调用lambda时,它会保持外部范围。但是当你传入params时,它会创建一个新的内部范围。
更新我对found.call( params['obsId'], settings.messages['get']['200'] )
的通话解决了这个问题。
答案 1 :(得分:0)
你是否有机会运行Ruby 1.8?那时.()
语法不存在。您必须在1.8中使用以下两种表示法之一:
found[params['obsId']]
found.call(params['obsId'])
但是在Ruby 1.8中,定义lambdas的-> {}
语法也不存在。您可能会遇到更多错误,需要用
found = lambda do |id|
# ...
end