2009-07-13 13 views
6

Cuando trato de hacer esto en Sinatra,error se produce cuando intento "todos" método en el 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 

Devuelve este error,

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

¿Alguien podría apuntar a la dirección correcta ?

Gracias,

Respuesta

14

Su experimenta este error porque Sinatra toma el valor de retorno de una ruta y la convierte en una cadena antes de tratar de mostrar al cliente.

le sugiero que utilice una vista/plantilla para lograr su objetivo:

# 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 añadir sus comentarios a una variable de cadena y lo devuelve cuando el hecho:

get '/show' do 
    comments = Comment.all 

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

    return output 
end 
Cuestiones relacionadas