2009-07-13 16 views
6

Kiedy próbuję to zrobić w Sinatra,błąd zdarza się, gdy próbuję „ALL” metody w 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 

Zwraca ten błąd,

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

Czy ktoś może wskazać mi w dobrym kierunku ?

Dzięki,

Odpowiedz

14

Twój otrzymuję ten błąd ponieważ Sinatra przyjmuje wartość zwracaną trasy i zamienia go na sznurku przed próbuje wyświetlić go do klienta.

Proponuję użyć widoku/szablon, aby osiągnąć swój cel:

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

lub dołączyć swój komentarz do zmiennej String i zwraca go, gdy skończysz:

get '/show' do 
    comments = Comment.all 

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

    return output 
end 
Powiązane problemy