gpt4 book ai didi

ruby-on-rails - 将应用程序 Controller 方法传递给邮件程序

转载 作者:行者123 更新时间:2023-12-04 03:46:22 25 4
gpt4 key购买 nike

我想将一个方法从应用程序 Controller 传递给邮件程序,以将购物车内容发送到电子邮件。

application_controller.rb中的方法:

def current_order
if session[:order_id].present?
Order.find(session[:order_id])
else
Order.new
end
end

邮寄者:

class CartMailer < ApplicationMailer
default from: "from@example.com"

def send_cart_contents
@order = current_order
mail(to: "to@example.com", subject: 'Order from the site')
end
end

和 View :

Order from the site
<% @order.order_items.each do |oi| %>
<%= oi.product.name %>
<% end %>

我收到一个错误:未定义的局部变量或方法“current_order”。我究竟做错了什么?谢谢。

更新

如果我将它作为参数传递:

# Preview all emails at http://localhost:3000/rails/mailers/cart_mailer
class CartMailerPreview < ActionMailer::Preview
def cart_mailer_preview
CartMailer.send_cart_contents(current_order)
end
end

我也遇到了 NameError。

更新 2

CartMailerPreview 没有访问 current_order 的权限,所以要测试它只需传递一个带有参数的 id。正常使用时一切正常。

最佳答案

CartMailer 将无法看到 application_controller.rb 中定义的 current_order。这是好事。

最佳做法是让 send_cart_contents 方法接受订单,以便它可以邮寄出去:

class CartMailer < ApplicationMailer
default from: "from@example.com"

def send_cart_contents(order)
@order = order
mail(to: "to@example.com", subject: 'Order from the site')
end
end

通过这种方式,您可以从后台作业中邮寄购物车,并将您的 postman 与您的 Controller 隔离开来。依赖全局 current_order 不是一个好的做法。

关于ruby-on-rails - 将应用程序 Controller 方法传递给邮件程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32998801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com