3

form_for を使用してメールにファイルを添付するにはどうすればよいですか? これまでのところ、エラーが発生します:

ActiveRecord::StatementInvalid in UsersController#create

NoMethodError: nil:NilClass の未定義のメソッド `name': INSERT INTO "users" ("created_at", "email", "file_field", "name", "text_field", "updated_at") 値 (?, ?, ?, ?, ?, ?)

これが私が思いついたものです。

class UserMailer < ActionMailer::Base
  default :from => "example@gmail.com"

    def registration_confirmation(user)
      @user = user
         unless user[:file_field].nil?
           file=user[:file_field]
           attachments[file.original_filename] = File.open(file.path, 'rb'){|f| f.read}
         end
    mail(:to => user.email, :subject => "Registered")
  end
end

意見

  <%= form_for @user, :html => {:multipart => true} do |f| %>
<div class="field">
  <%= f.label :file_field %><br />
  <%= f.file_field :file_field %>
</div>
 <div class="field">
   <%= f.label :name %><br />
   <%= f.text_field :name %>
</div>
<div class="field">
   <%= f.label :email %><br />
   <%= f.text_field :email %>
</div>
<div class="actions">
   <%= f.submit %>
</div>
<% end %>

アクションを作成

def create
@user = User.new(params[:user])

  if @user.save
UserMailer.registration_confirmation(@user).deliver
    redirect_to @user
  else
   render action: "new" 
  end
end
4

1 に答える 1

1

これは、stackoverflow に関するホットなトピックです。他のスレッドもチェックしてください。それらは非常に詳細であり、問​​題を解決するはずです。

例:ソリューション 1ソリューション 2ソリューション 3

これがうまくいかない場合は、戻ってきてください。必ず別のメール添付スレッドを立ち上げます。

于 2013-04-20T22:46:27.717 に答える