Sinatra NoMethodError

时间:2015-07-24 22:14:44

标签: ruby sinatra haml

我试图在我的Ruby应用中使用Haml文件,但是我收到了这个错误:

NoMethodError at /issues

undefined method `map' for "localhost:27017":String 

index.haml in block in singleton class
9.  -@issues.each do |issue|

app.rb in block in <class:App>
14.     haml :"issues/index"

这是我的index.haml文件:

%h1 All Issues

%table.table.table-hover
  %thead
    %tr
      %th Title
      %th Description
      %th Created at
  -@issues.each do |issue|
    %tr
      %td
        %a(href="/issues/#{issue.id}/edit")=issue.name
      %td=issue.description 
      %td=issue.id.generation_time.ago_in_words 
  -unless @issues.any?
    %tfoot
      %tr
        %th
          There are no issues.
          %a.btn.btn-primary(href="/issues/new") Create one 

这是app.rb文件:

require_relative "models/issue"

class App < Sinatra::Base
  enable :sessions
  register Sinatra::Flash

  get "/" do
    "redirect/issues" 
  end   

  get "/issues" do 
    @issues = Issue.all 

    haml :"issues/index"
  end   
end

问题似乎在于我的-@issues.each做|发布|循环,但我要注意问题是Ruby问题还是Haml或其他问题。我还在my / models目录中创建了一个issue.rb文件,如下所示:

class Issue 
  include Mongoid::Document
  include Mongoid::Timestamps::Updated

  field :name, type: String
  field :description, type: String
end

编辑:我认为我的问题是问题未初始化。我收到的错误是:

uninitialized constant Issue::Mongoid (NameError)

1 个答案:

答案 0 :(得分:0)

我注意到的第一件事是,在它之后的supern和Ruby代码之间没有剩余的空间。我不确定这是否真的对Haml的解析方式有所影响,但是all the examples in the Haml reference leave a space,例如

-@issues.each do |issue|

应该是

- @issues.each do |issue|

接下来要检查Issues.all的值,或者使用pry之类的调试,或者只使用warn将其输出到控制台,例如

@issues = Issue.all
warn @issues

binding.pry
@issues = Issue.all

index.haml中的-unless @issues.any?行也可能会受益于更改。 any?通常使用块来调用,- if @issues.empty?会(IMO)比使用方法使用不太好的unless更容易理解。