Подтвердить что ты не робот

LoadError Невозможно автоматически загрузить сообщение

В моем приложении; когда я отправляю форму, я получаю эту ошибку:

LoadError at /questions
Unable to autoload constant Message, expected /app/models/message.rb to define it

Он указывает на действие create в контроллере Questions:

@message = current_user.messages.new(:subject => "You have a question from #{@question.sender_id}"`

Модель сообщения:

class Mailboxer::Message < ActiveRecord::Base
  attr_accessible :notification_id, :receiver_id, :conversation_id
end
4b9b3361

Ответ 1

По соглашению в rails (и это принудительно выполняется автозагрузчиком), пути к файлам должны соответствовать пространствам имен.

Итак, если у вас есть модель Mailboxer::Message, она должна быть в app/models/mailboxer/message.rb.

Кроме того, вы, вероятно, загружаете автозагрузчик при попытке загрузить класс Message (думаю, это происходит изнутри ActAsMessageable). Он ищет файл message.rb в пути загрузки, находит его в app/model/ и загружает этот файл таким образом, чтобы он мог найти класс Message.

Проблема заключается в том, что в этом файле не найден класс Message, а только класс Mailboxer::Message (который радикально отличается). Вот почему он выбрасывает "Невозможно автозагрузить постоянное сообщение, ожидаемое /app/models/message.rb, чтобы определить его".

Чтобы исправить это, создайте каталог app/models/mailboxer/ и поместите в него Mailboxer::Message.

Ответ 2

Как указано в документации, для отправки сообщения от модели A модели B необходимо добавить:

acts_as_messageable 

в обеих моделях.

И затем выполните:

a.send_message(b, "Body", "subject")

Итак, в ваших моделях:

  class User < ...
    act_as_messageable
  end

@question_sender должен быть экземпляром User.

@question_sender.send_message({attr_accessor_hash}, recipient_user, @question.body, "You have a question from #{@question_sender.id}")

Пока attr_accessor не связан с драгоценным камнем, и метод send_message не знает об этих атрибутах, вам придется переопределить его:

https://github.com/mailboxer/mailboxer/blob/master/lib/mailboxer/models/messageable.rb#L60

добавить метод attr_accessor_hash в метод

def send_message({attr_accesor_hash}, recipients, msg_body, subject, sanitize_text=true, attachment=nil, message_timestamp = Time.now)

И посмотрите на код, добавьте поля, где вам нужно: attr_accessor["param"]

Ответ 3

Обратите внимание на следующие строки:

@question = Question.new(params[:question])

@question.message = @message

и;

attr_accessible :answer, :question, :sender_id, :recipient_id, :conversation_id

Строка @question.message вызывает атрибут, недоступный в Question Model, поэтому сделайте это;

attr_accessible :answer, :question, :sender_id, :recipient_id, :conversation_id, message