【发布时间】:2016-02-01 17:49:10
【问题描述】:
我在某些邮件程序中使用了 Rails 部分中的以下代码,但我对我的解决方案不满意,并且感觉这远非最佳。
我有一封电子邮件
来自我的邮件:
def the_email_i_am_sending(user, inquiry, params = {})
get_variables(inquiry) #This also provides access to my `@user` object
@contact_name = [params[:guest_last_name].to_s, " ", params[:guest_first_name].to_s].join
我总是有@user,但有时特定的合作伙伴会使用上面定义的[:guest_last_name] 和[:guest_first_name] 附加参数调用我们的API。这允许我将@contact_name 定义为一个单独的实例变量。
当这是.present?,即不为零时,我想在电子邮件的字段中呈现@contact_name,而不是从我们的数据库中提取的@user.login。
然后,我的邮件视图使用以下代码来决定将呈现哪个部分。
<% if @contact_name.present? %>
<%= render 'meet_your_guest_v3', tujia_guest: @contact_name %>
<% else %>
<%= render 'meet_your_guest_v3' %>
<% end %>
然后,我的解决方案是在邮件程序中呈现的部分中使用此代码。这似乎有点冗长,但我不确定local_assigns.has_key?的正确用法
<% if local_assigns.has_key?(:partner_guest) %>
<%= partner_guest %> <p>(via our partner</p>
<% else %>
<%= @user.login %>
<% end %>
有没有更好的办法?
【问题讨论】:
-
与其将逻辑放在视图中,不如将其放在控制器中。测试是否提供了参数,并从
user或params为名称设置一个局部变量。然后在视图中输出数据即可。
标签: ruby-on-rails ruby-on-rails-4 partial-views actionmailer