1

尝试在 Sinatra 中返回响应时出现 NoMethodError。这是错误:

/contact/book-me.php 处的 NoMethodError

#<String:0x00000001911418> 的未定义方法 `body='

/home/kerrick/.rvm/gems/ruby-1.9.3-p194/gems/sinatra-1.3.2/lib/sinatra/base.rb in body
        response.body = value
/home/kerrick/.rvm/gems/ruby-1.9.3-p194/gems/sinatra-1.3.2/lib/sinatra/base.rb in invoke
        body res
/home/kerrick/.rvm/gems/ruby-1.9.3-p194/gems/sinatra-1.3.2/lib/sinatra/base.rb in call!
      invoke { dispatch! }
/home/kerrick/.rvm/gems/ruby-1.9.3-p194/gems/sinatra-1.3.2/lib/sinatra/base.rb in call
      dup.call!(env)
/home/kerrick/.rvm/gems/ruby-1.9.3-p194/gems/rack-protection-1.2.0/lib/rack/protection/xss_header.rb in call
        status, headers, body = @app.call(env)
[...]

这是相关代码:

# Snipped, but basically populate the @error hash if the form wasn't filled out right
if @error.length == 0
  #Snipped, but basically handle the success case
else
  @response = ''
  @error.each do |x, y|
    @response << "<li>#{y}</li> \n"
  end
  return [400, @response]
end

为什么会这样?

4

1 回答 1

1

在Sinatra@response中用作您的返回值是导致您的问题的原因。Ruby on Rails OldWiki 记录了同样的问题,因此它不仅仅是 Sinatra 特有的。你应该改变你的代码看起来像这样,它会工作:

else
  @send_errors = ''
  @error.each do |x, y|
    @send_errors << "<li>#{y}</li> \n"
  end
  return [400, @send_errors]
end
于 2012-06-01T15:06:19.117 回答