2012-04-24 2 views
0

Я - Rails noob, и у меня возникли проблемы с отправкой электронной почты с шоу-страницы. Существует несколько учебников по контактным формам, но я не могу найти тот, на котором я отправляю электронное письмо со страницы, например страницы «показать». Думаю, у меня большие ошибки на моих маршрутах. В модели я заявляю, что у Пользователей есть несколько рекламных акций, а на странице показа рекламных объявлений я хочу разрешить 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 

Вот форма, которую я использую, чтобы отправить электронная почта (URL: вероятно, неправильный, но я не знаю, как это должно выглядеть)

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

Я бы хотел некоторые помогают с этим. Я не могу найти что-либо подобное в stackoverflow, я пытался в течение нескольких дней. Спасибо!

+0

Что ошибка вы получаете .. –

+0

Каковы ваши настройки smtp в development.rb? –

ответ

2

Возможно, вам не хватает маршрута в config/routes.rb

вы можете определить его как

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

Обратите внимание, что quotedeliver должен быть переписан quote_deliver следовать рубин конвенции синтаксиса. Когда вы звоните

QuoteMailer.quote_mail.deliver 

Вы не даете параметр, поэтому попробуйте этот

QuoteMailer.quote_mail(current_user).deliver 

И изменить метод с

def quote_mail(user) 
    mail .... 
end 

и вы все хорошо

+0

Спасибо за ответ Albandiguer! Я получаю NoMethodError в Promotions # 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

+0

Привет, Вы можете отправить эту форму с помощью POST. поэтому remove: html => {: method =>: put}. Если вы определили маршрут, как я сказал, путь - это quotedeliver_promotion_path, без параметра. Пользователь получает модель в контроллере – albandiguer

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

от которого вы получаете доступ к переменной пользователя, это должно быть поощрение, я думаю.

1

Может у опубликовать сообщение об ошибке вы получаете, и есть некоторые отличные экраны слепки (через Railscasts) относительно отправки электронной почты http://railscasts.com/?tag_id=28

и одна последней вещи, Не прикрепляйте ваши почтовую отправку метод показа действие (если вы делаете в данный момент), причина в том, показать действие только для просмотра что-то, и пользователи могут освежать эту страницу, поэтому если вы приложите почтовую программу для того, письма может погаснуть для каждого обновления

приветствий

+0

спасибо за этот отзыв ... на основе этой информации, я думаю, это означает, что я собираюсь использовать jquery modal, чтобы показать форму почты, которая будет существовать на другой странице. – Tim

Смежные вопросы