Rails 3: неопределенный метод сообщения для папки - PullRequest
0 голосов
/ 28 апреля 2011

Я использую Rails 3 и хотел бы иметь систему сообщений.Вот учебник для него: http://www.novawave.net/public/rails_messaging_tutorial.html

Это для Rails 2, поэтому я пытался реализовать его в Rails 3.

Все прошло хорошо, и я могу отправлять сообщения.Но когда я хочу проверить свой почтовый ящик, появляется эта ошибка:

undefined method `messages' for #<Folder:0x0000010419fd48>

Контроллер почтового ящика:

class MailboxController < ApplicationController
  def index
    redirect_to new_session_path and return unless logged_in?
    @folder = current_user.inbox
    show
    render :action => "show"
  end

  def show
    @folder ||= current_user.folders.find(params[:id])
    @messages = @folder.messages.paginate :per_page => 10, :page => params[:page], :include => :message, :order => "messages.created_at DESC"
  end
end

Когда я проверяю консоль с помощью:

User.find(9).inbox

все хорошо, и вывод:

ruby-1.9.2-p180 :085 > User.find(9).inbox
 => #<Folder id: 1, user_id: 9, parent_id: nil, name: "Inbox", created_at: "2011-04-27 21:37:00", updated_at: "2011-04-27 21:37:00"> 

Но когда я добавляю .messages, он возвращает ошибку.

Когда я пытаюсь получить руководство по сообщениям, оно работает:

User.find(9).received_messages
 => [#<MessageCopy id: 7, recipient_id: 9, message_id: 8, folder_id: 1, created_at: nil, updated_at: "2011-04-27 23:15:25">, #<MessageCopy id: 8, recipient_id: 9, message_id: 9, folder_id: 1, created_at: nil, updated_at: "2011-04-27 23:25:06">]

Модели и контроллеры такие же, как в учебнике.

Есть идеи?

Привет

РЕДАКТИРОВАТЬ:

* Добавлена ​​ошибкаи представление

Ошибка:

undefined method `messages' for #<Folder:0x0000010409c900>

app/controllers/mailbox_controller.rb:11:in `show'
app/controllers/mailbox_controller.rb:5:in `index'

Просмотр почтового ящика / шоу:

<h2><%=h @folder.name %></h2>

<table border="1">
  <tr>
    <th>From</th>
    <th>Subject</th>
    <th>Received</th>
  </tr>

  <% @messages.each do |message| %>
    <tr>
      <td><%=h message.author.login %></td>
      <td><%= link_to h(message.subject), message_path(message) %></td>
      <td><%= distance_of_time_in_words(message.created_at, Time.now) %> ago</td>
    </tr>
  <% end %>
</table>

<%= will_paginate @messages %>

1 Ответ

1 голос
/ 28 апреля 2011

Возможно, вы упустили шаг в установлении отношений в ваших моделях.

Убедитесь, что ваш Folder.rb (модель папки) имеет отношение has_many, установленное с сообщениями.

class Folder < ActiveRecord::Base
   has_many :messages, :class_name => "MessageCopy"

Ошибка, которую вы получаете в контроллере, говорит о том, что это не так, модель папки не имеет метода с именем 'messages', который ActiceRecord (ORM Rails) сгенерирует для вас с кодом has_many.

Иэн.

...