我对Rails上的ruby非常新,非常感谢你的帮助!!
我尝试使用帖子中的信息在创建帖子后向用户发送电子邮件。我可以在创建帖子后通过电子邮件发送给用户,但我无法将帖子的信息添加到邮件模板中。如果我尝试在电子邮件模板中使用posts变量,Rails将返回"未定义的局部变量或方法`micropost'对于#<#:0x007fedf274d348>"。
如果有人可以帮助我?
这是我的邮件:
class Bicimensajeros < ApplicationMailer
def post_email(usuario)
@usuario = usuario
mail(:from => "#{usuario.nombre} <#{usuario.email}>", :to => "#{usuario.nombre} <#{usuario.email}>", :bcc => "mail@gmail.com", :subject => "Tu bicimensajero va en camino")
end
end
这是邮件视图:
<h2>Recibimos tu pedido y un bicimensajero va en camino</h2>
<p>Hola, <%= @usuario.nombre %>:</p>
<p>
¡Recibimos tu pedido con éxito!
<span class="content"><strong>Recoleccion:</strong> <%= micropost.pickup %></span>
<span class="content"><strong>Entrega:</strong> <%= micropost.dropoff %></span>
</p>
<p>Estamos en camino y recibirás una notificación por mail cuando tu envío haya sido completado.</p>
<p>Cualquier duda, estamos disponible en el chat de atención a clientes dentro de <a href="https//bicimensajero.com">bicimensajero.com</a></p>
<p>Por whatsapp al</p>
<p>Tu envío está asegurado.</p>
<p>Bicimensajero México</p>
以下是微博模型:
class Micropost < ActiveRecord::Base
belongs_to :usuario
after_create :send_email
default_scope -> { order(created_at: :desc) }
validates :usuario_id, presence: true
validates :pickup, presence: true
validates :dropoff, presence: true
validates :precio, presence: true
validates :telefono, presence: true
validates :notas, presence: true
end
def send_email
Bicimensajeros.post_email(self.usuario).deliver
end
我的微博控制器:
class MicropostsController < ApplicationController
before_action :logged_in_usuario, only: [:create, :destroy]
def create
@micropost = current_usuario.microposts.build(micropost_params)
if @micropost.save
flash[:success] = "Bicimensajero en camino!"
redirect_to root_url
else
@feed_items = []
flash[:warning] = "No se solicito nada :("
render 'estaticas/home'
end
end
def destroy
end
private
def micropost_params
params.require(:micropost).permit(:pickup, :dropoff, :telefono, :precio, :notas)
end
end
答案 0 :(得分:1)
您的问题是您的动作邮件程序模板没有对名为“micropost”的对象的引用。在邮件程序方法及其相应模板之间共享对象的简单方法是使用实例变量,就像您当前使用'@usuario'实例变量一样。您应该对'@micropost'实例变量执行相同的操作,但是您的邮件程序方法需要知道将其设置为什么。因此,为post_email方法提供第二个参数,允许您传入Micropost对象。将邮件更改为:
class Bicimensajeros < ApplicationMailer
def post_email( usuario, micropost )
@usuario = usuario
@micropost = micropost
mail(:from => "#{usuario.nombre} <#{usuario.email}>", :to => "#{usuario.nombre} <#{usuario.email}>", :bcc => "mail@gmail.com", :subject => "Tu bicimensajero va en camino")
end
end
您还需要更新模板以使用实例变量'@micropost'而不是未知的局部变量'micropost':
<h2>Recibimos tu pedido y un bicimensajero va en camino</h2>
<p>Hola, <%= @usuario.nombre %>:</p>
<p>
¡Recibimos tu pedido con éxito!
<span class="content"><strong>Recoleccion:</strong> <%= @micropost.pickup %></span>
<span class="content"><strong>Entrega:</strong> <%= @micropost.dropoff %></span>
</p>
<p>Estamos en camino y recibirás una notificación por mail cuando tu envío haya sido completado.</p>
<p>Cualquier duda, estamos disponible en el chat de atención a clientes dentro de <a href="https//bicimensajero.com">bicimensajero.com</a></p>
<p>Por whatsapp al</p>
<p>Tu envío está asegurado.</p>
<p>Bicimensajero México</p>
最后,您需要确保调用邮件程序的post_email方法的代码将Micropost对象作为其第二个参数传递。这是在您的Micropost模型中通过传递'self'作为第二个参数来完成的:
class Micropost < ActiveRecord::Base
belongs_to :usuario
after_create :send_email
default_scope -> { order(created_at: :desc) }
validates :usuario_id, presence: true
validates :pickup, presence: true
validates :dropoff, presence: true
validates :precio, presence: true
validates :telefono, presence: true
validates :notas, presence: true
def send_email
Bicimensajeros.post_email( self.usuario, self ).deliver
end
end
希望这有帮助!
答案 1 :(得分:0)
您没有将micropost
传递给邮件程序,但会在您的电子邮件视图中使用它。您需要将micropost
方法中的单独变量post_email
传递给邮件程序。
在邮件程序中,您应该像@micropost
一样分配实例变量@usuario
。然后,在您的视图中,您需要将micropost
更改为@micropost
。