Rails 表单发送的邮件视图模板传值
Rails mailer view template pass value send by a form
这是我第一次尝试使用 rails 邮件程序发送电子邮件。但是,我能够发送普通电子邮件,但是当我尝试传递由表单发送的登录用户 (current_user) 名称和参数值时,我收到了错误消息。未定义的方法 'params'.
payment_mailer.rb
class PaymentMailer < ApplicationMailer
def success(user)
mail(to: "#{user.first_name} #{user.last_name} <#{user.email}>", subject: "Payment Successful")
end
end
success.html.erb
<div class = "col-sm-12">
<h1>Payment Successful</h1>
<p>Dear <%= user.first_name %>, Thank you for being a part of our system<br>
Your invoice (#<%= params[:id] %>) has been generated.
</p>
</div>
<div class = "clearfix"></div>
<div class = "col-sm-6">
<table class = "table">
<thead>
<tr>
<th>Paid Ammount</th>
<th>Card Transaction Fee (2.9% + 0.30)</th>
<th>Credited Ammount</th>
</tr>
</thead>
<tbody>
<tr>
<td>€<%= params[:amount] %></td>
<td></td>
<td></td>
</tr>
</tbody>
<h3>Total credited amount in your Account is: </h3>
</table>
</div>
<div class = "clearfix"></div>
</div>
payment_controller.rb
amount = params[:amount]
@user = current_user
netamt = (amount.to_f - ((amount.to_f*2.9)/100 + 0.30))
payment = @user.payments.create(:amount => netamt, :method => "Card", :txn_code => params[:stripeToken])
@user.update_attribute(:balance, @user.balance+netamt)
PaymentMailer.success(current_user).deliver_now
请指导我。
控制器对象,例如 params
或 current_user
未在您的邮件程序上下文中定义。
您需要为用户设置这些值,或者将它们作为附加参数传递到您的邮件程序方法中。您还需要分配实例变量以在邮件视图中访问这些值(与将控制器中定义的实例变量传递给 ActionView 的原理相同)。
class PaymentMailer < ApplicationMailer
def success(user, invoice_id, amount)
@invoice_id = invoice_id
@amount = amount
mail(to: "#{user.first_name} #{user.last_name} <#{user.email}>", subject: "Payment Successful")
end
end
但是,amount
、id
和 user
似乎都是 payment
对象的变量,所以这听起来像是您真正应该成为的对象将 payment
传递给 success
方法,而不是 current_user
。这可能吗?
付款后在你的支付控制器中更改,就这样
PaymentMailer.success(payment).deliver_now
然后在您的邮件程序中执行
class PaymentMailer < ApplicationMailer
def success(payment)
@payment = payment
@user = payment.user
mail(to: "#{@user.first_name} #{@user.last_name} <#{@user.email}>", subject: "Payment Successful")
end
end
并在您的邮件模板中使用
@payment.id #for payment id
@payment.amount #for amount
@user.first_name #for user name
这是我第一次尝试使用 rails 邮件程序发送电子邮件。但是,我能够发送普通电子邮件,但是当我尝试传递由表单发送的登录用户 (current_user) 名称和参数值时,我收到了错误消息。未定义的方法 'params'.
payment_mailer.rb
class PaymentMailer < ApplicationMailer
def success(user)
mail(to: "#{user.first_name} #{user.last_name} <#{user.email}>", subject: "Payment Successful")
end
end
success.html.erb
<div class = "col-sm-12">
<h1>Payment Successful</h1>
<p>Dear <%= user.first_name %>, Thank you for being a part of our system<br>
Your invoice (#<%= params[:id] %>) has been generated.
</p>
</div>
<div class = "clearfix"></div>
<div class = "col-sm-6">
<table class = "table">
<thead>
<tr>
<th>Paid Ammount</th>
<th>Card Transaction Fee (2.9% + 0.30)</th>
<th>Credited Ammount</th>
</tr>
</thead>
<tbody>
<tr>
<td>€<%= params[:amount] %></td>
<td></td>
<td></td>
</tr>
</tbody>
<h3>Total credited amount in your Account is: </h3>
</table>
</div>
<div class = "clearfix"></div>
</div>
payment_controller.rb
amount = params[:amount]
@user = current_user
netamt = (amount.to_f - ((amount.to_f*2.9)/100 + 0.30))
payment = @user.payments.create(:amount => netamt, :method => "Card", :txn_code => params[:stripeToken])
@user.update_attribute(:balance, @user.balance+netamt)
PaymentMailer.success(current_user).deliver_now
请指导我。
控制器对象,例如 params
或 current_user
未在您的邮件程序上下文中定义。
您需要为用户设置这些值,或者将它们作为附加参数传递到您的邮件程序方法中。您还需要分配实例变量以在邮件视图中访问这些值(与将控制器中定义的实例变量传递给 ActionView 的原理相同)。
class PaymentMailer < ApplicationMailer
def success(user, invoice_id, amount)
@invoice_id = invoice_id
@amount = amount
mail(to: "#{user.first_name} #{user.last_name} <#{user.email}>", subject: "Payment Successful")
end
end
但是,amount
、id
和 user
似乎都是 payment
对象的变量,所以这听起来像是您真正应该成为的对象将 payment
传递给 success
方法,而不是 current_user
。这可能吗?
付款后在你的支付控制器中更改,就这样
PaymentMailer.success(payment).deliver_now
然后在您的邮件程序中执行
class PaymentMailer < ApplicationMailer
def success(payment)
@payment = payment
@user = payment.user
mail(to: "#{@user.first_name} #{@user.last_name} <#{@user.email}>", subject: "Payment Successful")
end
end
并在您的邮件模板中使用
@payment.id #for payment id
@payment.amount #for amount
@user.first_name #for user name