Rails - WillPaginate Conflict - PullRequest
       52

Rails - WillPaginate Conflict

1 голос
/ 23 мая 2011

Я пытаюсь разбить на страницы messages a group.

class GroupsController < ApplicationController
...
def show
...
@message = @group.messages.paginate(:page => params[:page])
end

  <% unless @group.messages.empty? %>
  <table class="messages" summary="Messages from Group">
  <tr>
  <td class="messages">
  <span class="content"><%= messages.content%></span>
  <span class="timestamp">
  Posted <%= time_ago_in_words(messages.created_at) %> ago.
  </span>
  </td>
  </tr>
 </table>
 <%= will_paginate @messagess%>
 <%end %>

Но когда я пытаюсь открыть свою страницу group#show, выдает ошибку: undefined method 'content' for #<WillPaginate::Collection:0x31a67f0>, но строка, которую выдает ошибка - это строка, где я создаю новый Message, то есть на странице group#show а также:

 <%= f.text_area :content, :rows=>5 , :cols=>49 %> 

Есть идеи?

1 Ответ

2 голосов
/ 23 мая 2011

Вам нужно перебрать сообщения и распечатать каждое из них по отдельности.

Контроллер:

def show
  @messages = @group.messages.paginate(:page => params[:page])
end

Вид:

<% unless @messages.empty? %>
  <table class="messages" summary="Messages from Group">

    <% @messages.each do |message| %>
      <tr>
        <td class="messages">
          <span class="content"><%= message.content %></span>
          <span class="timestamp">
            Posted <%= time_ago_in_words(message.created_at) %> ago.
          </span>
        </td>
      </tr>
    <% end %>

  </table>
  <%= will_paginate @messagess%>
<% end %>

Чтобы предотвратить ошибку в вашей форме, вам нужно будет передать ей один экземпляр сообщения. например,

form_for(Message.new) do
...