我是否正确执行此操作 - 使用link_to从控制器调用操作

时间:2011-04-06 14:13:35

标签: ruby-on-rails actionmailer link-to

请原谅这个的简单和长度,但我有一个小测试应用程序,它有一个用户表,包括姓名,电子邮件和工资属性。我创建了一个邮件程序,我会自行决定将此数据的报告发送给特定用户,换句话说,当我点击一个按钮时。我的按钮是使用link_to创建的,并在我的主users_controller中调用一个动作,然后调用邮件程序动作。 (我希望这才有意义)。看起来如下,正如我所希望的那样工作;我只是想知道这是否是这样做的正确方法:

在我的users_controller中(由脚手架生成器创建):

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

在user_mailer.rb文件中:

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

在用户的show.html.erb页面中,这是电子邮件的发送方式:

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

在我的routes.rb文件中,以便一切正常执行(它确实执行):

resources :users do 
member do 
get 'sendemail'
end

所以,说了这么多,它就像它应该的那样工作。我点击用户的show.html.erb页面,在那里我将获得我想要最终显示的数据和图表,并且我可以根据自己的判断,向这个用户发送一封包含这些数据的电子邮件,或者我放入的任何内容。 mailer.html.erb文件。当它被发送时,它会闪烁我在控制器中指定的消息,并将我留在该页面上,就像我指定的那样;所以它的工作。我只是想知道,这是做正确的,最正确的ruby / railsy方法吗?

1 个答案:

答案 0 :(得分:0)

此代码与Rails Guides Action Mailer示例非常相似,因此可以说您正在创建railsy代码。

此外,如果您的应用程序演变得更加宏大,您可能会考虑通过后台作业发送电子邮件,以避免电子邮件发送阻止当前线程。

否则代码看起来很棒。当然,您很可能在完成控制器中的某些操作后发送电子邮件,而不是直接通过电子邮件发送专用操作。例如,您可能有一个welcome操作,可以在成功的用户记录保存上发送电子邮件。