1

ユーザーが互いにメッセージを送信できるように、レールアプリでメッセージングを構築しています。メールボックスなどのいくつかの宝石を見てきましたが、最終的には自分で作成することにしました。

誰かがこれらのピースをまとめるのを手伝ってくれることを願っています。ここで同様の質問の回答をたどっています。

Rails コンソールでテストしていますが、次のエラーが発生し続けます。

未定義のメソッド `send_message' for #

どうすればこれを修正できますか?

コントローラ

class MessagesController < ApplicationController
    # create a comment and bind it to an article and a user  
    def create
      @user = User.find(params[:id])
      @sender = current_user
      @message = Message.send_message(@sender, @user)
      flash[:success] = "Message Sent."
      flash[:failure] = "There was an error saving your comment (empty comment or comment way to long)"
    end
end

ルート

  resources :users, :except => [ :create, :new ] do
     resources :store
     resources :messages, :only => [:create, :destroy] 
  end

メッセージ モデル

class Message < ActiveRecord::Base
  belongs_to :user

  scope :sent, where(:sent => true)
  scope :received, where(:sent => false)

  def send_message(from, recipients)
     recipients.each do |recipient|
       msg = self.clone
       msg.sent = false
       msg.user_id = recipient
       msg.save
     end
     self.update_attributes :user_id => from.id, :sent => true
   end
end
4

1 に答える 1

4

クラス レベルでメソッドを呼び出しています: Message.send_message。これが機能するには、次のような宣言が必要です。

def self.send_message(from, recipients)
  # ...
end

しかし、代わりにこれを得ました:

def send_message(from, recipients)
  # ...
end

そのため、必要なインスタンスでメソッドを呼び出すか、リファクタリングしてクラス レベルで機能するようにします。

于 2012-11-07T21:01:45.153 に答える