0

请原谅这个简单和冗长,但我有一个小测试应用程序,它有一个用户表,有姓名、电子邮件和薪水属性。我创建了一个邮件程序,它将根据我的判断向特定用户发送此数据的报告,换句话说,当我单击一个按钮时。我的按钮是使用 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 的做事方式吗?

4

1 回答 1

0

该代码看起来与Rails Guides Action Mailer示例非常相似,因此只要说您正在创建 railsy 代码就足够了。

此外,如果您的应用程序发展到更大的规模,您可能需要考虑通过后台作业传递电子邮件,以避免电子邮件传递阻塞当前线程。

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

于 2011-04-06T14:24:03.283 回答