Ruby on rails 未定义的方法'read';零级:零级
当我试图通过电子邮件发送上传的附件时,为什么我得到nil:NilClass的未定义方法“read” 清单u controller.rbRuby 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,
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
的参数顺序与方法定义不匹配。非常感谢您的解释和投入的时间。我从错误的角度看待这个问题。谢谢你的建议!