我正试图弄清楚如何在我的Rails 4应用程序中设置邮件程序类。
我制作了一个名为admin_notes的邮件程序。我想用它在网站上采取某些行动时向内部团队发送电子邮件。
在我的邮件程序/ admin_note.rb中,我有:
class AdminNote < ApplicationMailer
def unknown_organisation(organisation_request, user_full_name, name)
@organisation_request =
@user_full_name =
@organisation_request.name =
# @greeting = "Hi"
mail( to: "test@testerongmail.com",from: "test@testerongmail.com", subject: "A new organisation")
end
end
我有一个organisation_requests模型。它有:
class OrganisationRequest < ActiveRecord::Base
belongs_to :profile
delegate :user_full_name, to: :profile, prefix: false, allow_nil: true
组织请求表有一个名为:name的属性。
创建新的组织请求时,我想向内部团队发送管理员注释,提醒某人启动流程。
我正在努力弄清楚如何在邮件程序方法中定义三个变量。
我计划将发送电子邮件调用添加到组织请求控制器中的创建操作。
如何设置这些变量?
创建组织请求的表单是:
<%= simple_form_for(@organisation_request) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :organisation_id, collection: @all_organisations << ['other', nil] %>
</div>
<div class="form-inputs">
<%= f.input :name %>
</div>
<div class="form-actions">
<%= f.button :submit, "Create", :class => 'formsubmit' %>
</div>
<% end %>
NEW ATTEMPT:
我的组织控制器中有一个创建操作,我在电子邮件中添加了此服务类请求:
def create
@organisation_request = OrganisationRequest.new(organisation_request_params)
@organisation_request.profile_id = current_user.profile.id
if @organisation_request.save
NewOrgRequestService.send_unknown_organisation_requested_flag(organisation_request)
return redirect_to(profile_path(current_user.profile),
flash[:alert] => 'Your request is being processed.')
else
# Failure scenario below
@all_organisations = Organisation.select(:title, :id).map { |org| [org.title, org.id] }
render :new
end
end
然后我有一个服务/组织请求/ NewOrgRequestService.rb
class OrganisationRequest < ActiveRecord::Base
class NewOrgRequestService
attr_accessor :organisation_request
def self.send_unknown_organisation_requested_flag(organisation_request)
if @organisation_request.name.present?
AdminNote.unknown_organisation_requested(organisation_request, user_full_name, name).deliver_later
end
end
end
end
AdminNote邮件程序包含:
class AdminNote < ApplicationMailer
layout 'transactional_mailer'
def unknown_organisation_requested(organisation_request, user_full_name, name)
@organisation_request = @organisation_request
@user_full_name = @organisation_request.user_full_name
@name = organisation_request.name
# @greeting = "Hi"
mail
to: "test@testerongmail.com",from: "test@testerongmail.com", subject: "A new organisation"
end
end
这不起作用,但我想知道我是否在正确的轨道上?我不确定控制器中的create动作是否需要对到达文件的services / organisation_requests / path有某种引用?
我想我可能比我开始时更糟糕 - 但是我对于接下来要尝试的事情没有想法。
答案 0 :(得分:0)
这可以帮助您。
在您的邮件程序方法
def unknown_organisation(org,user)
@org = org
@user = user
mail(to: "test@testerongmail.com",from: "test@testerongmail.com", subject: "A new organisation")
end
在保存organization_request之后的控制器方法中,这就是设置变量的方法。你可以传递你想要的变量。
AdminNote.unknown_organization(@organization_request, current_user).deliver_now
在您的邮件程序模板中,您可以像在操作视图中一样访问传递的值。这就是你使用变量的方式。
<%= @org.name %>
<%= @org.full_name %>
希望这会有所帮助
如果您想排队邮件或稍后发送邮件,可以使用ActiveJob在后台发送邮件。
有关详情,请参阅http://guides.rubyonrails.org/active_job_basics.html
答案 1 :(得分:0)
我知道我来晚了,但是我走了。
我了解到您正在尝试向邮件程序发送一些参数(值),以便在发送电子邮件时可以使用它。
为此,您只需要定义一个接受某些参数的mailer方法。完成的操作就在AdminNote Mailer unknown_organization方法中。
让我们进入您的新尝试。
除了传递未定义的变量organization_request
外,您在此处所做的一切似乎都是正确的。您已经创建了实例变量@organization_request
,但是您传递的是未定义的内容。在这里
NewOrgRequestService.send_unknown_organisation_requested_flag(organisation_request)
那是你的第一个问题。可以将其改进为: 您的组织#create
def create
@organisation_request = OrganisationRequest.new(organisation_request_params)
@organisation_request.profile_id = current_user.profile.id
if @organisation_request.save
@organisation_request.send_unknown_organisation_requested_flag
redirect_to(profile_path(current_user.profile),
flash[:alert] => 'Your request is being processed.')
else
# Failure scenario below
@all_organisations = Organisation.select(:title, :id).map { |org| [org.title, org.id] }
render :new
end
end
您的模型可以如下:
class OrganisationRequest < ActiveRecord::Base
def send_unknown_organisation_requested_flag
if self.name.present?
AdminNote.unknown_organisation_requested(self).deliver_later
end
end
end
我不知道为什么要在模型类中定义一个类。
您的邮件程序应如下所示:
class AdminNote < ApplicationMailer
layout 'transactional_mailer'
def unknown_organisation_requested(organisation_request)
@organisation_request = organisation_request
@user_full_name = @organisation_request.user_full_name
@name = organisation_request.name
# @greeting = "Hi"
mail
to: "test@testerongmail.com",from: "test@testerongmail.com", subject: "A new organisation"
end
end
这里有很多错别字和方法实现错误。