为什么我会得到未定义的方法`read' for nil:当我尝试通过电子邮件发送上传的附件时,是否为NilClass?
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
我非常感谢你的帮助。
答案 0 :(得分:0)
错误正是它所说的:
params[:resume].nil?
将评估为true,当然,nil:NilClass没有读取方法。
您可以通过
检查您的参数是否正在填充 unless params[:resume].blank?
r = params[:resume].read
end
答案 1 :(得分:0)
您的代码存在一些问题。
首先,您尝试使用相同的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])
最后,您在params哈希上调用方法read()
。
UserMailer.new_resume(params[:resume].read(), params[:resume].original_filename, @user, @listing).deliver
哈希来自哪里? params[:resume]
如何拥有一个可以调用read()
的实例化对象?通常param哈希是表单提交或浏览器请求的结果,因此它不太可能包含可以调用方法的实例化对象。
这是你的错误的来源。该错误告诉您params[:resume]
为nil
。因此,调用任何方法都会引发错误。