2009-07-13 8 views
6

Quando provo a fare questo in Sinatra,errore si verifica quando provo "tutto" metodo DataMapper

 
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 

Esso restituisce questo errore,

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

Qualcuno mi potrebbe indicare la giusta direzione ?

Grazie,

risposta

14

vostro ottenere questo errore perché Sinatra prende il valore di ritorno di un percorso e lo converte in una stringa prima di tentare di visualizzare al cliente.

vi suggerisco di utilizzare una vista/modello per raggiungere il tuo obiettivo:

# 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 %> 

o aggiungere commenti a una variabile String e restituirlo quando il fatto:

get '/show' do 
    comments = Comment.all 

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

    return output 
end 
Problemi correlati