Ruby on rails 4 Rails-单击按钮发送电子邮件

Ruby on rails 4 Rails-单击按钮发送电子邮件,ruby-on-rails-4,actionmailer,Ruby On Rails 4,Actionmailer,轨道4.1.1 我有一个OrdersController,在OrdersShowAction上我有 orders_controller.rb def show @order = Order.find(params[:id]) @client = Client.find(@order.client_id) if request.post? OrderMailer.order_send(@client, @order).deliver flash[:notice] =

轨道4.1.1

我有一个OrdersController,在OrdersShowAction上我有

orders_controller.rb

def show
  @order = Order.find(params[:id])
  @client = Client.find(@order.client_id)

  if request.post?
    OrderMailer.order_send(@client, @order).deliver
    flash[:notice] = 'Order details sent!'
    redirect_to order_path(@order.id)
  end
end
def send_order_mail
  @order = Order.find(params[:id])
  @client = Customer.find(@order.client_id)

  OrderMailer.order_send(@order, @client).deliver
  flash[:notice] = "Order has been sent."
  redirect_to order_path(@order.id)
end
那么从我的观点来看

(show.haml)

如果我从If语句中取出“OrderMailer”并访问show/order页面,电子邮件将被重复发送,直到我关闭dev服务器,这样我知道邮件部分发送/工作正常

我只是不确定如何将按钮“单击/发送电子邮件”绑定在一起?我需要一条路线,但如果我已经有订单/展示页面的路线,我不确定如何将其连接在一起

routes.rb

resources :orders, :path => 'orders'

我不知道如何使您当前的方法工作,但有几种方法可以做到这一点。我用了一种方法:

设置控制器操作:

orders_controller.rb

def send_order_mail
  @parameters = Model.get_parameters
  OrderMailer.name_of_action(@parameters).deliver
  # redirect code here
end
设置您的路线:

get send_order_mail, to: 'orders_controller#send_order_mail', as: :send_order_mail
然后制作链接

link_to 'Send mail', send_order_mail_path, class: "big-button"

好的,在@steel的帮助下,这里是代码

routes.rb(将开始更改为符号)

orders_controller.rb

def show
  @order = Order.find(params[:id])
  @client = Client.find(@order.client_id)

  if request.post?
    OrderMailer.order_send(@client, @order).deliver
    flash[:notice] = 'Order details sent!'
    redirect_to order_path(@order.id)
  end
end
def send_order_mail
  @order = Order.find(params[:id])
  @client = Customer.find(@order.client_id)

  OrderMailer.order_send(@order, @client).deliver
  flash[:notice] = "Order has been sent."
  redirect_to order_path(@order.id)
end
orders/show.html.erb上有链接

<%= link_to "Send Order by email", :controller => "orders", :action => "send_order_mail", :id => @order.id %>
“订单”,:action=>“发送订单邮件”,:id=>@order.id%>
mailers/order_mailer.rb

class OrderMailer < ActionMailer::Base

  add_template_helper(OrdersHelper)

  default from: "mail@example.com"

  def order_send(order, client)
    @order = order
    @client = client
    mail(to: "#{@client.email}", subject: "Your subject")
  end
end
类OrderMailer谢谢@steel的重播。添加该路由会在启动dev server“未定义的局部变量或方法'send_order_mail'for#(namererror)”?您在orders_controller中定义了它吗?是的,我定义了。我现在的路由为'get'orders/:id',到:'orders_controller#send_order_mail',as::send_order_mail',但单击“send”链接什么都不做。这段代码在我的应用程序中对我有效,所以我怀疑你的实现出了问题。很高兴看到代码的要点或git。@polarcare是否在按钮视图中使用“发送订单邮件”而不是“发送订单邮件路径”?如果是,请使用“发送订单邮件路径”来解决问题。