2012-04-24 84 views
0

我是Rails noob,並且在顯示頁面發送電子郵件時遇到問題。這裏有幾個聯繫表格教程,但我找不到一個我從頁面發送電子郵件的地方,比如'show'頁面。我相信我的路線有很大的錯誤。在模型中,我聲明用戶有幾個促銷活動,並且在促銷展示頁面上,我希望允許current_user向@user發送電子郵件。Ruby on Rails:從顯示頁面發送電子郵件

這裏是應用程序/郵寄/ quote_mailer.rb

class QuoteMailer < ActionMailer::Base 
    default :from => "[email protected]" 

    def quote_mail(promotion) 
    @user = user 
    mail(:to => user.email, :subject => "You have an inquiry homeboy!") 
    end 
end 

在promotions_controller我把這個行動,我認爲可能是錯誤的:

def quotedeliver 
    QuoteMailer.quote_mail.deliver 
    flash[:notice] = 'report sent!' 
    redirect_to root_path # or wherever 
end 

這裏是我用來發送表單電子郵件(:網址可能是錯誤的,但我不知道它應該如何看)

<%= form_for quote_mail, :url => quotedeliver_promotion_path(promotion), :html => {:method => :put } do |f| %> 
    <%= f.text_area :body %> 
    <%= f.submit %> 
<% end %> 

我會愛一些幫助。在stackoverflow上我找不到任何東西,我一直在嘗試幾天。謝謝!

+0

請告訴我錯誤你越來越.. – 2012-04-24 04:45:21

+0

什麼是你的smtp設置在development.rb? – 2012-04-24 05:24:22

回答

2

您可能錯過了config/routes.rb中的路由

你可以像

post '/quotedeliver_promotion' => 'promotions#quotedeliver', :as => quotedeliver_promotion 

注意quotedeliver已被改寫quote_deliver遵循的Ruby語法約定定義它。當你調用

QuoteMailer.quote_mail.deliver 

你不給參數,那麼試試這個

QuoteMailer.quote_mail(current_user).deliver 

而且隨着

def quote_mail(user) 
    mail .... 
end 

改變你的方法,你都好

+0

感謝您的回答Albandiguer!我在促銷中遇到了NoMethodError#show undefined method'quote_deliver_promotions_path'這是表單。我會愛你的幫助! <%= form_for @quote_mail,:url => quote_deliver_promotions_path(@user),:html => {:method =>:put} do | f | %> \t <%= f。text_area:主體%> \t \t \t \t <%= f.submit%> \t \t \t \t <% end %> – Tim 2012-04-25 02:54:55

+0

嗨,你可以在POST提交此表單。所以刪除:html => {:method =>:put},如果你按照我的說法定義了路由,路徑是quotedeliver_promotion_path,沒有參數。用戶被賦予控制器中的模型 – albandiguer 2012-04-29 23:27:51

0
def quote_mail(promotion) 
    @user = user 
    mail(:to => user.email, :subject => "You have an inquiry homeboy!") 
end 

從哪裏訪問用戶變量,應該是我認爲的提升。

1

可以ü後您收到此錯誤信息,而且還有關於發送電子郵件http://railscasts.com/?tag_id=28

和最後一件事,一些優秀的屏幕類型轉換(通過railscasts),不要你的郵件發送方法連接到一個節目動作(如果你正在做的),原因是表演動作只是爲了某種看法和用戶可能會被刷新該頁面,因此,如果您將一個郵件到,信件就可能出去每個刷新

歡呼

+0

感謝這個提示...基於這個信息我認爲這意味着我將使用jquery模式來顯示將存在於另一頁上的郵件表單。 – Tim 2012-04-25 13:52:41

相關問題