2012-02-24 61 views
0

我目前正在使用Rails 3並在聯繫表單上工作。我的數據正在發送,我可以從params哈希訪問它,但當我嘗試將它發送到我的ActionMailer類以用於電子郵件時,我正在引發奇怪的錯誤。使用ActionMailer從發佈數據發送電子郵件的問題

它目前正在拋出此錯誤。

undefined method `TestName' for #<MessageMailer:0x00000003f43af0> 

,並表示該錯誤是在這些線路上

app/mailers/message_mailer.rb:8:in `message' 
app/controllers/contact_controller.rb:20:in `message' 

奇怪的是,'TestName'是我進入的聯繫方式爲:name輸入值。

下面是message_mailer.rb和contact_controller.rb我的代碼

MessageMailer

class MessageMailer < ActionMailer::Base 

    include ActiveModel::Validations 

    def message(data) 

    @data = data 
    validates_presence_of @data[:name] 
    validates_presence_of @data[:email] 
    validates_presence_of @data[:website] 
    validates_presence_of @data[:message] 

    mail(:from => "[email protected]", :to => "[email protected]", :subject => "New Message From #{data.name}") 

    end 
end 

的ContactController

class ContactController < ApplicationController 

    def message 
    if request.post? 
     @data = { 
     :name => params[:name], 
     :email => params[:email], 
     :website => params[:website], 
     :message => params[:message] 
     } 

     if MessageMailer.message(@data).deliver 
     redirect('/contact', :flash => 'Thank you for the message. I will get back to you as soon as possible') 
     else 
     redirect('/contact', :flash => 'Oops! Something went wrong. I will look into it. Until it\'s fixed you can email me at [email protected]') 
     end 

    else 
     redirect('/contact', :flash => 'Please fill out the contact form to get in touch.') 
    end 

    end 

end 

跟它的錯誤是在message_mailer.rb行validates_presence_of @data[:name]if MessageMailer.message(@data).deliver in contact_controller.rb

任何幫助將是偉大的!

UPDATE:好吧,我解決了原來的錯誤,但現在它拋出這個錯誤wrong number of arguments (0 for 1)MessageMailer.message(@data).deliver。我試圖將@data更改爲params以繞過@data變量的任何問題,並且它仍在提供。

回答

0

請按照http://railscasts.com/episodes/206-action-mailer-in-rails-3http://guides.rubyonrails.org/action_mailer_basics.html

你可能在POST數據中犯了錯誤MessageMailer.message(@data)可能是類名&函數名稱問題。 或者可能是由於您需要在郵件配置設置後重新啓動服務器。

讓我知道如果它沒有解決?

+0

@Archit想出方法錯誤,但我仍然得到這個錯誤'錯誤的參數數目(0 1)'。我重新啓動了服務器,並用'params'替換了'@ data',它仍然拋出這個錯誤。不知道爲什麼,因爲我很明確地給它一個論點。 – Mike 2012-02-24 09:15:43

+0

@params會有零,如果顯示'錯誤數量的參數(0爲1)'使用調試器檢查 – 2012-02-24 09:51:50

+0

我沒有使用'@ params'我使用'params',我知道事實上是一個散列填充與發佈數據。 – Mike 2012-02-24 10:22:22

1

validates_presence_of(和其他驗證方法)被設計爲需要屬性名稱進行測試的類方法。所以,你使用的是他們(這是不正確的方法中)的方式導致其評估爲

​​

這實際上導致了它

self.TestName 

檢查這就是爲什麼你會得到未定義的方法錯誤。

方法來解決它......

  1. 不要在郵件使用驗證這樣。只需使用String#空手動檢查這些字符串的空白?
  2. 創建一個單獨的對象,@data值被賦值給它。使用validates_presence_of聲明(,級別爲,比如ActiveRecord)並使用#validate進行測試!

HTH

下面
+0

好吧我刪除了所有的驗證,現在它拋出錯誤'錯誤數量的參數(0爲1)'在這一行'如果MessageMailer.message(params).deliver'當我明確給它一個參數 – Mike 2012-02-24 09:14:33

+0

Mike can you將修改後的代碼粘貼到https://gist.github.com/並提供鏈接?將有助於檢查你作爲一個整體。 – 2012-02-25 20:50:13