Ruby on rails 未定义的方法'read';零级:零级

Ruby on rails 未定义的方法'read';零级:零级,ruby-on-rails,ruby,Ruby On Rails,Ruby,当我试图通过电子邮件发送上传的附件时,为什么我得到nil:NilClass的未定义方法“read” 清单u 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,

当我试图通过电子邮件发送上传的附件时,为什么我得到nil:NilClass的未定义方法“read”

清单u 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
用户_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

我真的很感谢你的帮助。

错误就在于它所说的:

 params[:resume].nil?
将计算为true,当然,nil:NilClass没有读取的方法

您可以检查您的参数是否由

 unless params[:resume].blank?
    r = params[:resume].read
 end

您的代码有几个问题

首先,您尝试使用相同的
id
param查找两个资源。
参数[:id]
应属于用户或列表。是哪一个

另一方面,
User.find\u by_id(params[:id])
是多余的
User.find(params[:id])
应该足够了,因为默认的查找值是
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
。因此,对其调用任何方法都将引发错误。

params[:resume]
为nil。如何将其传递给控制器?顺便说一句,传递给
new\u resume
的参数顺序与方法定义不匹配。非常感谢您的解释和投入的时间。我从错误的角度看待这个问题。谢谢你的建议!