我正试着用Mailboxer gem发送带有附件的邮件。
我的堆栈是:rails 4和ruby 2.1.1
但是,我可以看到使用carrierWave的附件已经被支持作为下面代码中的链接。
https://github.com/ging/mailboxer/blob/4b2681c1790b823f7b493fb00b41e9899bb90ebe/app/models/message.rb#L13
不过,我的设置完全是这样的。没有附件的普通邮件可以。
这是我的代码:
控制器:

def create_message
    if params[:user].present? & params[:message].present? & params[:subject].present?
      current_user.send_message(User.find(params[:user]), params[:message], params[:subject])
      redirect_to inbox_path
    end
  end

这是我的视图代码:
<%= form_tag do %>
    <%= select_tag 'user', options_from_collection_for_select(User.all, :id, :fullname) %><br/>
    <%= text_field_tag 'subject' %><br/>
    <%= text_area_tag 'message' %><br/>
    <%= submit_tag 'Send' %>
<% end %>

上面的代码工作正常,消息正在发送,但是,当我尝试像这样将文件字段添加到其中并尝试更改控制器代码时,附件不会被上载:
def create_message
    if params[:user].present? & params[:message].present? & params[:subject].present?
      current_user.send_message(User.find(params[:user]), params[:message], params[:subject], true , params[:attachment])
      redirect_to inbox_path
    end
  end

观点:
<%= form_tag do %>
    <%= select_tag 'user', options_from_collection_for_select(User.all, :id, :fullname) %><br/>
    <%= text_field_tag 'subject' %><br/>
    <%= text_area_tag 'message' %><br/>
    <%= file_field_tag 'attachment' %>
    <%= submit_tag 'Send' %>
<% end %>

我认为这是一个强大的情妇的问题。在Rails 3中,我可以使用attr_accessible。但是,如何确保attachment字段不被阻止和允许?
附:我已经安装了CarrierWaveGem,我甚至多次重启服务器。
谢谢。

最佳答案

我正在改变我以前的回答,因为事实上它是不正确的。
基本上,如果您的问题和我的一样,可以通过在表单中添加:multipart=>true来轻松解决。至少在我的情况下,这就是为什么卡里尔瓦夫没有拿起附件。
我试图通过扩展mailboxer消息类并设置和安装一个具有不同属性名的全新carrierWave对象来解决这个问题。基本上,这允许我避免使用mailboxer中定义的attachment属性并自定义附件。
但随着mailboxer message.rb类的扩展,这变得非常混乱。所以我最终放弃了那门课。不过,拥有自己的上传程序而不是依赖Mailboxer附件是非常方便的,特别是如果您希望或需要将文件上传到其他目录或云中。
最后,我为我的附件创建了一个新模型,并在上面安装了一个新的CarrierWave上传程序。通过这种方式,我可以根据自己的需要定制它,而不必调整mailboxer,它在文档或支持方面几乎没有。
也许这对你不再有用了,但可能会帮助别人!

10-04 21:40