error happens when I try “all” method in datamapper

。_饼干妹妹 提交于 2019-12-07 01:54:08

问题


When I try to do this in Sinatra,

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

It returns this error,

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

Could anyone point me to the right direction?

Thanks,


回答1:


Your getting this error because Sinatra takes the return value of a route and converts it into a string before trying to display it to the client.

I suggest you use a view/template to achieve your goal:

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

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

Or append your comments to a String variable and return it when your done:

get '/show' do
  comments = Comment.all

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

  return output
end


来源:https://stackoverflow.com/questions/1117272/error-happens-when-i-try-all-method-in-datamapper

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!