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