当我尝试通过电子邮件发送上载的附件时,为什么会得到nil:NilClass的未定义方法“ read”?
listings_controller.rb
def send_resume_email
@listing = Listing.find(params[:id])
@user = User.find_by_id(params[:id])
UserMailer.new_resume(params[:resume].read(), params[:resume].original_filename, @user, @listing).deliver
redirect_to findjobs_path, notice: 'Message sent'
end
user_mailer.rb
def new_resume(user, listing, file, filename)
@listing = listing
@user = user
attachments[filename] = file
@url = 'http://www.new.com'
mail(to: listing.user.email, subject: 'Thanks for the awesome site')
end
非常感谢您的帮助。
您的代码有几个问题。
首先,您尝试使用相同的id
参数查找两个资源。本params[:id]
应该属于用户或上市。哪一个?
另一方面,User.find_by_id(params[:id])
是多余的。User.find(params[:id])
应该足够了,因为的默认查找值find
是id
。
@listing = Listing.find(params[:id])
@user = User.find_by_id(params[:id])
最后,您read()
在params哈希上调用该方法。
UserMailer.new_resume(params[:resume].read(), params[:resume].original_filename, @user, @listing).deliver
哈希来自哪里?以及如何params[:resume]
调用一个实例化的对象read()
?通常,参数散列是表单提交或浏览器请求的结果,因此不太可能包含可以调用方法的实例化对象。
这就是错误的根源。错误告诉您params[:resume]
是nil
。因此,对其调用任何方法都将引发错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句