Rails 3,Action Mailer,附件,form_for,电子邮件

时间:2013-04-20 22:12:36

标签: ruby-on-rails ruby-on-rails-3 actionmailer email-attachments

如何使用form_for将文件附加到邮件?到目前为止,它给了我一个错误:

UserController中的ActiveRecord :: StatementInvalid #create

NoMethodError:nil的未定义方法`name':NilClass:INSERT INTO“users”(“created_at”,“email”,“file_field”,“name”,“text_field”,“updated_at”)VALUES(?,? ,?,?,?,?)

这就是我想出来的。

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

1 个答案:

答案 0 :(得分:1)

这是stackoverflow上的热门话题,请务必查看其他主题。他们真的很深刻,应该解决你的问题。

例如:Solution 1Solution 2Solution 3

如果没有结果,请回来,我们一定会启动另一个邮件附件线程。