web-dev-qa-db-ja.com

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
49
pwz2000

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を入れます。

94
kik

統合テスト中にこれを取得しました。結局のところ、それは関連する備品でした。 /test/fixtures/wrong_name.ymlにある未使用のファイルを削除する必要がありました

2
Jay

ドキュメントに記載されているように、AモデルからBモデルにメッセージを送信するには、追加する必要があります。

acts_as_messageable 

両方のモデルで。

それから:

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

あなたのモデルでは:

  class User < ...
    act_as_messageable
  end

@question_senderUserインスタンスでなければなりません。

@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#L6

メソッドに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"]

1
tebayoso

これらの行に注意してください。

@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
Acacia