2014-06-20 63 views
39

在我的應用程序;當我提交表單,我得到這個錯誤: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 
+0

它看起來像一個命名空間問題。用戶和消息之間的關係如何定義,「Message」模型定義在哪裏? – Sharagoz

+0

@Sharagoz如果我從名稱中刪除了'Mailboxer ::',我得到錯誤'表'dating_development.messages'不存在'。這是有道理的,因爲沒有消息表,只有通知表。我只是意識到'Mailboxer :: Message'應該進入子目錄,但如果我開始沿着這條路走下去,那麼我會走錯路。 – pwz2000

+0

你可以在問題中分享'用戶'模型嗎? –

回答

76

按照慣例在rails中(這是由autoloader強制執行的),文件路徑應該匹配命名空間。

所以,如果你有一個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放入其中。

+1

感謝您的洞察力。我刪除了消息模型,因爲它不需要開始,但是你的觀點是100%正確的。 – pwz2000

+0

YESSSSSSSS!我的一週搜索結束了。這太不合適了! –

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是不相關的寶石,並且該方法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"]

+0

它指向''未定義的方法'attr_accessible'爲消息:類'' – pwz2000

+0

對不起,訪問器 – tebayoso

+0

我無法使用accessor沒有ActiveRecord,因爲它給出錯誤「未定義的方法'arel_table'''指向行' @message = current_user.messages.new'。將AR添加回模型會給我''表'dating_development.messages'不存在''也指向同一行。 – pwz2000

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 
+0

我曾嘗試過。它不幸地指向相同的錯誤。我認爲這與我必須創建的消息模型有關。 – pwz2000

0

我在集成測試中得到了這個。原來,這是與燈具有關的。必須在/test/fixtures/wrong_name.yml中刪除我未使用的文件

相關問題