我已将devise :confirmable
添加到我的模型中并创建了一个before_create以跳过确认。
before_create :skip_confirmation
def skip_confirmation
self.skip_confirmation!
end
我有一个名为store_mailer.rb的邮件,以及适当的视图app / views / stores / mailer / confirmation_instroctions.html.erb发送确认电子邮件。
class StoreMailer < Devise::Mailer
helper :application # gives access to all helpers defined within `application_helper`.
include Devise::Controllers::UrlHelpers # Optional. eg. `confirmation_url`
default template_path: 'store/mailer' # to make sure that your mailer uses the devise views
end
confirmation_instroctions.html.erb
<h2>Resend confirmation instructions</h2>
<%= form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { method: :post }) do |f| %>
<%= devise_error_messages! %>
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true, value: (resource.pending_reconfirmation? ? resource.unconfirmed_email : resource.email) %>
</div>
<div class="actions">
<%= f.submit "Resend confirmation instructions" %>
</div>
<% end %>
<%= render "stores/shared/links" %>
我正在尝试发送确认电子邮件:
StoreMailer.confirmation_instructions(@store).deliver
但它返回以下错误:ArgumentError in TransactionsController#create
wrong number of arguments (given 1, expected 2..3)
任何想法可能出错?
更新1
transaction_controlller.rb
def create
nonce_from_the_client = params['payment_method_nonce']
@result = Braintree::Customer.create(
first_name: params['first_name'],
last_name: params['last_name'],
:payment_method_nonce => nonce_from_the_client
)
if @result.success?
puts @result.customer.id
puts @result.customer.payment_methods[0].token
StoreMailer.confirmation_instructions(@store).deliver
redirect_to showcase_index_path, notice: 'Subscribed, please check your inbox for confirmation'
else
redirect_back( fallback_location: (request.referer || root_path),
notice: "Something went wrong while processing your transaction. Please try again!")
end
end
答案 0 :(得分:0)
confirmation_instructions
是Devise::Mailer
(StoreMailer
类的超类)中定义的方法。
如您所见here和here,它接受2个必需参数和1个可选参数。
您正在调用只传递一个参数的方法
您必须传递第二个参数(token
),如下所示:
def create
# ...
# Note: I'm not sure this is the token you really need.
# It's your responsibility check if it's correct.
token = @result.customer.payment_methods.first.token
StoreMailer.confirmation_instructions(@store, token).deliver
# ...
end
答案 1 :(得分:0)
@store.send_confirmation_instructions.deliver
这会生成确认令牌,并发送邮件。
答案 2 :(得分:0)
从标题看来,您似乎想稍后手动发送电子邮件。您问题中建议的解决方案只是推迟发送电子邮件,而不是完全手动触发它。
如果您想禁止立即发送电子邮件,然后手动发送,您可以这样做:
class RegistrationsController
...
def create
...
resource.skip_confirmation_notification!
...
end
您要触发电子邮件的其他地方,请致电:
User.first.send_confirmation_instructions
User.first
-与您的用户一起更改