我正在尝试修改以下代码,以便在email
存在时返回flash通知并成功。
class SubscribersController < ApplicationController
respond_to :json
def create
@subscriber = Subscriber.new(:first_name => params[:first_name],
:last_name => params[:last_name],
:email => params[:email],
:ip_address => request.remote_ip,
:referring_page => request.referer )
if @subscriber.save
flash[:notice] = "You've been subscribed!"
end
respond_with(@subscriber)
end
end
我如何检查电子邮件地址是否已存在并使用Flash消息返回成功?
如果电子邮件已经存在(模型需要检查),我不想抛出错误 - 我还想说你已经订阅了。
我已尝试使用.present?
进行检查,但会引发错误:
<h1>
NoMethodError
in SubscribersController#create
</h1>
<pre>undefined method `model_name' for ActiveRecord::Relation:Class</pre>
答案 0 :(得分:3)
我相信,你可以使用动态查找器。
@subscriber = Subscriber.find_or_initialize_by_email(params[:email], { :first_name => ..., })
但是,我认为,保存已保留的记录会返回false
,因此您需要检查是否
@subscriber.persisted? or @subscriber.save
flash[:success] = "You've been subscribed!"
end
答案 1 :(得分:2)
在订户模型中添加验证
validates_uniqueness_of :email
并在控制器中
@subscriber.valid?
if @subscriber.errors.on(:email) == "XXX"
flash[:error] = "email address exists already"
end