LoadError无法自动加载常量消息

在我的应用程序; 当我提交表单时,我得到这个错误:

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

它指向Questions控制器中的create操作:

 @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 

按照惯例在轨道(这是由自动加载器执行),文件path应该匹配命名空间。

所以,如果你有一个Mailboxer::Message模型,它应该在app/models/mailboxer/message.rb

另外,当你尝试加载一个Message类的时候,你可能会自动加载器(我的猜测是它发生在ActAsMessageable中)。 它在加载path中查找message.rb文件,在app/model/find它,从而加载该文件,以便findMessage类。

问题是,它没有在该文件中findMessage类,只有一个Mailboxer::Message类(这是完全不同的)。 这就是为什么它会抛出“无法自动加载常量消息,预期/app/models/message.rb来定义它”。

为了解决这个问题,创build目录app/models/mailboxer/并将Mailboxer::Message放在里面。

正如在文档中所述,要将消息从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与gem无关,并且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"]

注意这些行;

 @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 
Interesting Posts