2009-07-13 4 views
6

Wenn ich versuche, dies in Sinatra zu tun,Fehler passiert, wenn ich „alle“ -Methode in DataMapper versuchen

 
class Comment 
    include DataMapper::Resource 
    property :id,   Serial 
    property :body,   Text 
    property :created_at, DateTime 
end 

get '/show' do 
    comment = Comment.all 
    @comment.each do |comment| 
    "#{comment.body}" 
    end 
end 

Es gibt diesen Fehler zurück,

ERROR: undefined method `bytesize' for #<Comment:0x13a2248> 

Könnte mir jemand die richtige Richtung ?

Danke,

Antwort

14

Ihr immer diese Fehlermeldung, weil Sinatra den Rückgabewert einer Route nimmt und wandelt es in eine Zeichenfolge, bevor Sie es an den Client angezeigt werden soll.

Ich schlage vor, Sie verwenden einen Blick/template Ihr Ziel zu erreichen:

# file: <your sinatra file> 
get '/show' do 
    @comments = Comment.all 
    erb :comments 
end 

# file: views/comments.erb 
<% if [email protected]? %> 
    <ul> 
    <% @comments.each do |comment| %> 
     <li><%= comment.body %></li> 
    <% end %> 
    </ul> 
<% else %> 
    Sorry, no comments to display. 
<% end %> 

Oder Ihre Kommentare zu einem String-Variable anhängen und es zurück, wenn Sie fertig sind:

get '/show' do 
    comments = Comment.all 

    output = "" 
    comments.each do |comment| 
    output << "#{comment.body} <br />" 
    end 

    return output 
end