Ruby on rails 使用carrierwave gem的Rails电子邮件附件

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

我正在尝试允许用户以邮件形式上传文件并发送附件,而无需将其保存到服务器上。我正在使用Rails3、sqlite3和carrierwave。我原以为一切都设置正确了,但我收到了一个命名错误:undefined methodascii_only?for nil:NilClass`。我做错了什么

以下是我的控制器操作:

def提交工程

@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"}