nil:NilClass的未定义方法“读取”

里卡

当我尝试通过电子邮件发送上载的附件时,为什么会得到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

非常感谢您的帮助。

穆罕默德(Mohamad)

您的代码有几个问题。

首先,您尝试使用相同的id参数查找两个资源params[:id]应该属于用户或上市。哪一个?

另一方面,User.find_by_id(params[:id])是多余的。User.find(params[:id])应该足够了,因为的默认查找值findid

  @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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章