2009-07-13 41 views
6

Khi tôi cố gắng làm điều này trong Sinatra,lỗi xảy ra khi tôi cố gắng "tất cả" phương pháp trong 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 

Nó trả về lỗi này,

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

bất cứ ai có thể chỉ cho tôi đi đúng hướng ?

Cảm ơn,

Trả lời

14

bạn nhận được lỗi này vì Sinatra có giá trị trả về của một tuyến đường và chuyển đổi nó thành một chuỗi trước khi cố gắng để hiển thị nó cho khách hàng.

tôi đề nghị bạn sử dụng một cái nhìn/mẫu để đạt được mục tiêu của bạn:

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

Hoặc thêm ý kiến ​​của bạn đến một biến String và gửi lại khi thực hiện xong bạn:

get '/show' do 
    comments = Comment.all 

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

    return output 
end 
Các vấn đề liên quan