ошибка происходит, когда я пытаюсь "все" метод в datamapper - PullRequest
6 голосов
/ 13 июля 2009

Когда я пытаюсь сделать это в Синатре,

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

Возвращает эту ошибку,

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

Может ли кто-нибудь указать мне правильное направление?

Спасибо,

1 Ответ

14 голосов
/ 13 июля 2009

Вы получаете эту ошибку, потому что Sinatra принимает возвращаемое значение маршрута и преобразует его в строку, прежде чем пытаться отобразить его клиенту.

Я предлагаю вам использовать представление / шаблон для достижения вашей цели:

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

Или добавьте ваши комментарии к строковой переменной и верните ее, когда закончите:

get '/show' do
  comments = Comment.all

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

  return output
end
...