很新的rails / spree我正在尝试创建一个pdf上传器,用户可以上传图像然后发送给公司,但是当我尝试发送它时,我得到一个未定义的局部变量或方法。 spree_current_user'
这是给出错误的行。我知道这通常会获取id(我在控制器中使用了相同的行),但我不确定为什么它不会在订单邮件中工作。
pdfs = Pdf.where(user_id:spree_current_user.id,created_at:Date.today-1.hour)
基本上我只是想知道是否有人知道我还能做些什么?我尝试将其作为会话[]传递给控制器,但这也无效。
如果您可能需要查看其他任何文件,请告诉我们。非常感谢任何帮助!
提前致谢。
答案 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)
希望如果有人遇到类似的问题,这会有所帮助:)。