2012-07-25 84 views
0

控制器功能Ruby on Rails的,如果電子郵件存在返回成功

def request_invite 

     if !request.xhr? 
       render_404 
       return 
     end 

     @invitation = Invite.new(params[:invite]) 

     if @invitation.save 
      @return = { :error => false, :response => "Thank you" } 
     else 
       error_message = '<div class="error_message">' + @invitation.errors.full_messages.map {|error| "<p>#{error}</p>"}.join + "</div>" 
      @return = { :error => true, :response => error_message } 
     end 

     render :json => ActiveSupport::JSON.encode(@return) 

end 

模型

class Invite < ActiveRecord::Base 

    validates :email, :presence => true, :uniqueness => true 

    validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i 

end 

這要麼保存到數據庫,並顯示出成功的味精或是否存在拋出一個錯誤...

即使電子郵件已存在於數據庫中,我也想顯示成功消息,因此它不會顯示電子郵件已被添加

回答

1

您可以通過使用exists?來實現此目的。它可能看起來像這樣

email_exists = Invite.where(:email => params[:invite][:email]).exists? 

# Create the new invitation if email not already used 
if email_exists || Invite.new(params[:invite]).save 
    @return = { :error => false, :response => "Thank you" } 
else 
    # error 
    ... 
end 

或者你可以使用一個rescue趕ActiveRecord的例外

相關問題