Ruby on rails 使用carrierwave gem的Rails电子邮件附件
我正在尝试允许用户以邮件形式上传文件并发送附件,而无需将其保存到服务器上。我正在使用Rails3、sqlite3和carrierwave。我原以为一切都设置正确了,但我收到了一个命名错误:undefined methodascii_only?for nil:NilClass`。我做错了什么 以下是我的控制器操作: def提交工程Ruby on rails 使用carrierwave gem的Rails电子邮件附件,ruby-on-rails,ruby,ruby-on-rails-3,carrierwave,email-attachments,Ruby On Rails,Ruby,Ruby On Rails 3,Carrierwave,Email Attachments,我正在尝试允许用户以邮件形式上传文件并发送附件,而无需将其保存到服务器上。我正在使用Rails3、sqlite3和carrierwave。我原以为一切都设置正确了,但我收到了一个命名错误:undefined methodascii_only?for nil:NilClass`。我做错了什么 以下是我的控制器操作: def提交工程 @request = Request.find(params[:id]) @email = params[:email] @message = @email[:mess
@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_附加方法:
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
嘿,对不起,我删除了评论,因为我是在事后看到的。哈所以我又经历了一遍。我读了开头几行,然后马上下了结论。很抱歉。haNo担心,我发现错误来自附件行的文件名部分,因为它不喜欢@符号,如果我去掉它,只需键入一个通用文件名,电子邮件就会发送,但附件本身是空的,因此无法正确上载或处理文件。是的,我正在查看载波,请读我。事实上,我前几周才开始搞砸它。你不必打电话给警察。救命!在上面?从技术上讲,你还得保存缓存,对吗?我没有。我认为我不需要它,因为我实际上不打算将文件保存到服务器。我会在调用邮件发送程序之前尝试将其加入,看看是否有任何效果。是的,gem说现在可以通过将文件分配给属性来缓存文件,保存记录时会自动存储这些文件。另外,我那天没有存钱,因为我不允许。既然您提到了Rails3,我想应该是将它们添加到白名单中了,所以:将添加附件。但我可能说得太早了。就像我前几天经历的那样。
<%= 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 %>
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"}