3

我正在尝试在 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字段没有被阻止和允许?

PS - 我安装了carrierwave gem,我什至多次重启了我的服务器。

谢谢。

4

1 回答 1

2

我正在更改我之前的答案,因为实际上它是不正确的。

基本上,如果你的问题和我的一样,可以通过在表单中​​添加 :multipart => true 来轻松解决。至少在我的情况下,这就是为什么carrierwave没有拾取附件。

我试图通过扩展邮箱消息类并设置和安装具有不同属性名称的全新载波对象来解决该问题。基本上,这使我可以避免使用邮箱中定义的附件属性并自定义附件。

但这与mailboxer message.rb 类的扩展名变得非常混乱。所以我最终放弃了那门课程。尽管如此,拥有自己的上传器而不是依赖邮箱附件非常方便,特别是如果您想要或需要将文件上传到不同的目录或云。

最后,我为我的附件创建了一个新模型,并在其上安装了一个新的载波上传器。通过这种方式,我可以根据需要自定义它,而无需调整邮箱,它在文档或支持方面几乎没有。

可能这对您不再有用,但可能对其他人有所帮助!

于 2015-03-02T16:09:20.213 回答