2014-05-20 38 views
3

我試圖在Mailboxer Gem中發送郵件附件。文件上傳郵箱Gem

我的堆棧是:軌道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 %> 

我認爲這是與強PARAMS一個問題。在Rails 3中我可以使用attr_accessible。但是,如何確保attachment字段未被阻止並被允許?

P.S - 我安裝了carrierwave gem,我甚至重新啓動了我的服務器多次。

謝謝。

回答

2

我改變了我之前的回答,因爲事實上這是不正確的。

基本上,如果您的問題與我的一樣,可以通過將multipart => true添加到您的表單中來輕鬆解決。至少在我的情況下,這就是Carrierwave沒有拿起附件的原因。

我試圖通過擴展郵箱消息類,並設置和安裝具有不同屬性名稱的全新載波對象來解決此問題。基本上,這允許我避免使用mailboxer中定義的附件屬性進行工作,並自定義附件。

但是這對郵箱message.rb類的擴展非常混亂。所以我最終放棄了這個過程。儘管如此,擁有自己的上傳器而不是依賴郵箱附件非常方便,尤其是如果您想要或需要將文件上傳到不同的目錄或雲中時。因此,最後,我爲我的附件創建了一個新模型,並在其上安裝了一個新的載波上傳器。這樣,我可以根據需要自定義它,而無需調整郵箱,這在文檔或支持方面很少。

可能這對你不再有用,但可能會幫助別人!