2012-07-25 89 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的例外

相关问题