我试图在我的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)
答案 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
更容易理解。