2011-12-13 69 views
0

我试图修改下面的代码,使其返回闪存通知并成功,如果email存在。即使记录也存在,如何返回.save()的成功? - Rails 3.1

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 

我怎么能检查电子邮件地址已经存在,并且使用闪光灯消息返回成功?

我不想抛出一个错误,如果电子邮件已存在(模型检查) - 我想还是说你已经订阅。

我试着.present?检查,但它抛出一个错误:

<h1> 
    NoMethodError 
    in SubscribersController#create 
</h1> 
<pre>undefined method `model_name' for ActiveRecord::Relation:Class</pre> 

回答

1

我相信,你可以使用动态查找器来解决这个问题。

@subscriber = Subscriber.find_or_initialize_by_email(params[:email], { :first_name => ..., }) 

但是,我认为,保存持久的记录将返回false,所以你需要检查,如果

@subscriber.persisted? or @subscriber.save 
    flash[:success] = "You've been subscribed!" 
end 
2

添加验证中去订购模式

validates_uniqueness_of :email 

,并在控制器

@subscriber.valid? 

if @subscriber.errors.on(:email) == "XXX" 
    flash[:error] = "email address exists already" 
end 
相关问题