简体   繁体   中英

Did I do this correctly - Call an action from controller with link_to

Please excuse the simplicity and length of this, but I have a little test app that has a users table, with name, email, and salary attributes. I created a mailer that will send out a report of this data to a specific user at my discretion, in other words, when I click a button. My button is created using link_to, and calls an action in my main users_controller, which then calls the mailer action. (I hope that just made sense). It looks like the following and is working just as I hoped; I'm just looking to know if this is the right way to do something like this:

In my users_controller (created by the scaffold generator):

def sendemail  
@user = User.find(params[:id])  
UserMailer.welcome_email(@user).deliver  
redirect_to user_path(@user)  
flash[:notice] = 'Email has been sent!'  
end  

In the user_mailer.rb file:

def welcome_email(user)
@user = user
@url  = "http://example.com/login"
mail(:to => user.email,
     :subject => "Welcome to My Awesome Site")
end

In the User's show.html.erb page, this is how the email gets sent:

<%= link_to "Send Email", sendemail_user_path(@user) %>

In my routes.rb file, so that everything executes properly (which it does):

resources :users do 
member do 
get 'sendemail'
end

So, having said all this, it works just like it should. I click on the user's show.html.erb page where I would have the data and charts that I want to eventually display, and at my discretion, I can kick out an email to that user with this data, or whatever I put in the mailer.html.erb file. When it is sent, it flashes the message I specified in the controller, and leaves me on that page, just as I specified; so it's working. I just want to know, is this the right and most ruby/railsy way to do things?

This code looks very similar to the Rails Guides Action Mailer example, so suffice it to say you are creating railsy code.

Also, if your application evolved into a much grander scale you would want to consider delivering emails via a background job to avoid email deliveries from blocking the current thread.

Otherwise the code looks great. Of course, you would most likely send an email after doing something successful in a controller, rather than have a dedicated action for emailing directly. For instance, you might have a welcome action that sends an email on a successful user record save.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM