Ruby 关于 sinatra 和 slim 的问题

simpsonness · 2014年03月08日 · 最后由 googya 回复于 2014年03月08日 · 2587 次阅读

我用 Sinatra 和 slim 做一个小的 app。碰到一点问题。以下是我的 main.rb

get '/' do
    @assets = Asset.all
     @sum = 0
    @assets.each do |asset|
    @sum += asset.rent
    slim :asset
  end
end

在我的 view asset.slim 里我写的

h2 Mine
= @sum

在我的 localhost 里面的“/”显示

no implicit conversion of Asset into String

我就是要 sum 所有的 rent,然后显示出结果。现在显示不出来。

你确定要在循环里面渲染视图么

1.缩进很奇怪 2.为什么不 @sum = Asset.all.sum(:rent)

  1. slim :asset 应该写到 each block 的外面

试试

  get '/' do
    @assets = Asset.all
    @sum = 0
    @assets.each do |asset|
      @sum += asset.rent
    end
    slim :asset
end

简单的可以这样写:


require 'sinatra'
require 'slim'
get '/' do 
  @sum = 100

  slim :asset
end

__END__

@@ asset
html
  body
    h2 Mine
    = @sum


哈哈,我太马虎了,slim:asset 确实应该放在 each block 外面~~~ 这个问题解决了!

#3 楼 @googya 我用的 DataMapper 作为数据库,也有 form 作为 post action. 但是我的 form 出现不了 (我不清楚是不是我不能一次 submit 两个 property)。我已经 git push 了,可以麻烦你帮我看看吗,谢谢:-)

https://github.com/simpsonness/finance

#6 楼 @simpsonness 在 github 上帮你改了点,你看下

需要 登录 后方可回复, 如果你还没有账号请 注册新账号