2012-11-07 20 views
1

我一直在Rails應用程序中構建消息,以便用戶能夠發送其他消息。我已經看過郵箱等一些寶石,但最終決定自己創建。Rails中用戶到用戶的消息

我希望有人能幫助我把這些碎片放在一起。我一直在回答類似問題的答案here

我在軌測試控制檯和我不斷收到以下錯誤:

未定義的方法`send_message」爲#

我怎樣才能解決這個問題?

控制器

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

send_message不是一個類方法,消息需要實例化才能使用'send_message'。試試這個'def self.send_message(from,recipients)' – MrYoshiji

回答

4

要調用的方法級別:Message.send_message。對於這項工作,就想到這樣一個聲明:

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

但是,你得到這個代替:

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

所以,要麼調用該方法在你需要它的情況下,或重構讓它在班級上工作。

+0

謝謝我現在明白我錯過了什麼。現在當我測試(Message.new.send_message(User.find(1),User.find(2) )時出現以下錯誤:NoMethodError:未定義的方法'each'for#<用戶:0x007f9d1f402090> – DaveG

+0

只發送一個'User'到你的方法中,你不能指望迭代一個單獨的對象,請檢查你的代碼,這是錯誤的 – dimitarvp

+0

哦,是啊...謝謝 – DaveG

相關問題