Ruby on Rails: Send email from show page

对着背影说爱祢 提交于 2019-12-12 02:54:07

问题


I am a Rails noob and have a problem sending an email from a show page. There are several contact form tutorials out there but I cannot find one where I send an email from a page like a 'show' page. I have big errors in my routes I believe. In the model I state that Users have several Promotions and on the promotions show page I want to allow the current_user to send an email to @user.

here is app/mailers/quote_mailer.rb

class QuoteMailer < ActionMailer::Base
  default :from => "tim@example.com"

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

In promotions_controller I put this action which I think might be wrong:

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

Here is the form that I use to send the email (the :url is probably wrong but I dont know how it should look)

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

I would love some help with this. I cannot find anything like it on stackoverflow, I have been trying for days. Thank you!


回答1:


You are probably missing the route in config/routes.rb

you can define it like

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

Note that quotedeliver has to be rewritten quote_deliver to follow ruby syntax conventions. When you call

QuoteMailer.quote_mail.deliver

You are not giving the parameter, so try this

QuoteMailer.quote_mail(current_user).deliver

And change your method with

def quote_mail(user)
  mail ....
end

and you are all good




回答2:


There are some excellent screen casts (through Railscasts) regarding sending e-mail http://railscasts.com/?tag_id=28.

One last thing, do not attach your mail sending method to a show action (if you are doing currently), the reason is show action is only for view something and users might be refreshing that page, So if you attach a mailer to that, mails might go out for each refresh.




回答3:


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

from where you are access user variable, it should be promotion i think.



来源:https://stackoverflow.com/questions/10291713/ruby-on-rails-send-email-from-show-page

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!