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 が添付ファイルを取得しなかった理由です。

メールボックスの Message クラスを拡張し、まったく新しい Carrierwave オブジェクトを別の属性名でセットアップしてマウントすることで、この問題を解決しようとしました。基本的に、これにより、メールボックスで定義された添付ファイル属性を使用することを回避し、添付ファイルをカスタマイズすることができました。

しかし、これはメールボックスの message.rb クラスの拡張で非常に厄介になりました。それで結局そのコースはやめました。それでも、特にファイルを別のディレクトリやクラウドにアップロードしたい、またはアップロードする必要がある場合は、メールボックスの添付ファイルに頼るのではなく、独自のアップローダーを使用すると非常に便利です。

最後に、アタッチメント用の新しいモデルを作成し、新しいキャリアウェーブ アップローダーをマウントしました。そうすれば、ドキュメンテーションやサポートがほとんどないメールボックスを微調整する必要なく、思い通りにカスタマイズできます。

おそらくこれはあなたにとってはもう役に立たないかもしれませんが、他の人には役立つかもしれません!

于 2015-03-02T16:09:20.213 に答える