2015-11-26 44 views
1

我希望用户每天能够发送不超过5封电子邮件。有没有可能验证?Actionmailer验证发送的最大电子邮件

user_mailer.rb

class UserMailer < ActionMailer::Base 
    def contact_email(from_email, body, to_email) 
    @body = body 

    @user = User.find_by(email: to_email) 
    mail(from: from_email, to: to_email, subject: '', cc: from_email) 
    end 
end 

users_controller.rb

def send_mail 
    @user = User.find(params[:id]) 
    @body = params[:message] 

    UserMailer.contact_email(current_user.email, @body, @user.email).deliver_now 
end 
+0

试试这个=> UserMailer.contact_email(current_user.email,@body,@ user.email).deliver_now如果

+0

@mokariya任何一世dea逻辑可能是什么样子? – Ray

回答

1

您可以创建user_idcreated_at模型SentMail

修改您User模式,包括has_many :sent_mails

然后修改send_mail方法如下。

def send_mail 
    @user = User.find(params[:id]) 
    @body = params[:message] 
    if @user.sent_mails.last_day.count < 5 
    UserMailer.contact_email(current_user.email, @body, @user.email).deliver_now 
    @user.sent_mails.create 
    end 
end 

在你SentMail模型创建范围last_day创建以下查询where(created_at: 24.hours.ago..DateTime.now.utc)

SentMail模式也跟踪发出的电子邮件,如果你想存储的状态将是很好的一个好办法如果它被打开了,提供的邮箱,点击等。

+0

我试过上面的方法,但是'@ user.sent_mails.last_day.count'总是返回0 – Ray

+0

这是它生成的sql语句'SELECT COUNT(*)FROM“sent_mails”WHERE“sent_mails”。“user_id”= $ 1 AND “sent_mails”。“created_at”BETWEEN'2015-11-25 15:18:19.320982'AND'2015-11-26 15:18:19.321052')[[“user_id”,1]]' – Ray

+0

您从不创建用户的SentMail类。我编辑了上面的答案,在send_mail方法中添加'@ user.sent_mails.create',以便在发送邮件时创建'SentMail'实例。 –

相关问题