63

私のアプリでは; フォームを送信すると、次のエラーが表示されます。

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
4

4 に答える 4

116

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ます。

于 2014-06-24T16:07:35.540 に答える
3

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

于 2018-01-31T20:30:06.543 に答える
1

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#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"]

于 2014-06-20T19:00:06.553 に答える