控制器功能
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
这将保存到数据库并显示成功消息或如果存在则抛出错误...
即使电子邮件已存在于数据库中,我也希望显示成功消息,因此它不会显示该电子邮件已被添加
答案 0 :(得分: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异常