2011-12-13 65 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 
相關問題