在我的应用中;当我提交表单时,我收到此错误:
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
答案 0 :(得分:93)
按惯例在rails中(这由autoloader强制执行),文件路径应与命名空间匹配。
因此,如果你有Mailboxer::Message
模型,它应该在app/models/mailboxer/message.rb
。
此外,您可能在尝试加载Message
类时启动了自动加载器(我的猜测是它发生在ActAsMessageable中)。它在加载路径中查找message.rb
文件,在app/model/
中找到它,然后加载该文件,以便它可以找到Message
类。
问题是,它在该文件中找不到Message
类,只有Mailboxer::Message
类(完全不同)。这就是为什么它会抛出&#34;无法自动加载常量消息,期望/app/models/message.rb来定义它&#34;。
要解决此问题,请创建目录app/models/mailboxer/
并将Mailboxer::Message
放入其中。
答案 1 :(得分:1)
如文档中所述,要从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"]
答案 2 :(得分:1)
我在集成测试期间得到了这个。事实证明,这与灯具有关。不得不删除/test/fixtures/wrong_name.yml中未使用的文件
答案 3 :(得分:0)
注意这些行;
@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