我正在尝试允许用户以邮件形式上传文件并发送附件而无需将其保存到服务器上。我正在使用rails 3,sqlite3和carrierwave。我以为我已经正确设置了所有内容,但我收到了NoMethodError: undefined method
ascii_only?'为零:NilClass`。我做错了什么。
这是我的控制器动作:
def submit_eng
@request = Request.find(params[:id])
@email = params[:email]
@message = @email[:message]
@request = @request.eng_status(@request)
@subject = @email[:subject]
@additional_emails = @email[:recipient]
attachment = params[:attachment]
respond_to do |format|
RequestMailer.submit_additional(@request, @message, @additional_emails, @subject, attachment).deliver if @additional_emails != ""
@request.update_attributes(params[:request])
format.html { redirect_to home_url, alert: "SIR has been submitted to engineering. Please push up the revision level and resubmit if you make any changes." }
format.json { render json: @requests }
end
端
这是邮件程序中的submit_additional方法:
def submit_additional(request, message, additionalemails, subject, attachment)
@request = request
@message = message
@emails = additionalemails
@subject = subject
to = []
to << @emails
attachment[attachment.original_filename] = attachment.read()
mail to: to, subject: 'SIR '+@request.request_number.to_s+' notification'+' '+@subject, template_name: 'eng_notify'
end
最后,这是用户填写的表单:
<%= form_tag(:action => 'submit_eng', :multipart => true, :id => @request.id) %>
<p><label for="email_subject">Additional Subject Notes</label>
<%= text_field 'email', 'subject' %></p>
<p><label for="email_recipient">Additional Recipients</label>
<%= text_field 'email', 'recipient' %></p>
<p><label for="email_attachment">Attachments</label></p>
<%= file_field_tag 'attachment' %>
<p><label for="email_message"></label><br/>
<%= text_area 'email', 'message', value: render('submit_eng.text.erb'), class: "span6" %></p>
<%= form_tag %>
错误本身就像这样指向邮件程序方法中的'attachments []'行:
NoMethodError in RequestsController#submit_eng
undefined method `original_filename' for nil:NilClass
Application Trace
app/mailers/request_mailer.rb:11:in `submit_additional'
app/controllers/requests_controller.rb:138:in `block in submit_eng'
app/controllers/requests_controller.rb:137:in `submit_eng'
Request
Parameters:
{"utf8"=>"✓",
"authenticity_token"=>"R7h2RwuF0NYgoqfnm0k7/qNghcngXBNxznVt8sZGEH0=",
"email"=>{"subject"=>"",
"recipient"=>"asdf@gmail.com",
"message"=>"All,
\r\n\r\nA new SIR has been created by asdf with the following details:\r\n\r\nSIR #: 5\r\nRequester: sabrams\r\nRegional Sales Manager: sabrams\r\nQuote Number: \r\nOrder Number: \r\nCustomer: \r\nCustomer Location: \r\nProduct Line: EMW\r\nInquiry Creation Date: 2014-10-08\r\nStatus: In Engineering\r\n\r\nGeneral Description: asdf\r\nAdditional Comments: \r\n\r\n\r\nPlease log onto the Engineering Database and add engineering lead time,
hours,
and any other relevant information,
then submit the SIR to manufacturing.\r\n\r\nPlease contact asdf with any questions or comments."},
"attachment"=>"test.jpg",
"id"=>"5",
"multipart"=>"true"}