如何在订单邮件中获取用户ID - Spree

时间:2015-03-19 22:50:27

标签: ruby-on-rails-3 spree

很新的rails / spree我正在尝试创建一个pdf上传器,用户可以上传图像然后发送给公司,但是当我尝试发送它时,我得到一个未定义的局部变量或方法。 spree_current_user'

这是给出错误的行。我知道这通常会获取id(我在控制器中使用了相同的行),但我不确定为什么它不会在订单邮件中工作。

pdfs = Pdf.where(user_id:spree_current_user.id,created_at:Date.today-1.hour)

基本上我只是想知道是否有人知道我还能做些什么?我尝试将其作为会话[]传递给控制器​​,但这也无效。

如果您可能需要查看其他任何文件,请告诉我们。非常感谢任何帮助!

提前致谢。

2 个答案:

答案 0 :(得分:2)

您无法访问会话或控制器助手(spree_current_user是其中之一)。您必须将控制器级信息传递给您希望它们进入的对象(邮件程序)。

因此上传者对象的调用代码必须将用户id传递到您想要的对象中。由于你没有指定(确切地)哪个对象,我无法在上下文中回答。但作为一般规则,会话级概念(如当前用户)属于控制器,如果您希望它们位于其他地方(控制器之外),则需要将它们与调用从控制器调用的对象一起传递。

如果不可能,那么根据您的域模型,一阶关联(比如将user_id添加到相关对象)也是一个很好的解决方案。

答案 1 :(得分:0)

如果有其他人需要,我已经解决了这个问题。我所做的是将用户ID传递到视图中的隐藏字段:

hidden_​​field_tag' current_user',spree_current_user.id

然后我把它添加到控制器中 OrderMailer.send_to_client(...,...,...,params [:current_user])。deliver

然后我改变了我的原始pdf行,以便考虑在特定时间之间创建的pdf:

pdfs = Pdf.where(user_id:current_user,pdf_updated_at:Time.now-1.hour..Time.now)

以及通过此方法发送它。 def send_to_client(...,...,...,current_user)

希望如果有人遇到类似的问题,这会有所帮助:)。