在我的user.rb模型中,我有以下内容:
before_create :check_name
def check_name
user = User.where(:name => self.name, :place => self.place)
if user.present?
p "ccccccccccccccccccccccccccccccccccccccccc"
@error = "Same combination of name and place are already present"
return @error
end
end
并在我的控制器中:
def create
error_flag = false
@user =User.new(user_params)
if @user.save
error_flag = true
@success = I18n.t('user.success.user_created')
else
@error = find_error(@user)
end
respond_to do |format|
format.js {
render :layout => false,
:locals => {
:request => error_flag,
:user => @user
}
}
end
end
我的目标是,如果模型中定义的条件为真,则不创建用户,但无论如何都要创建用户。我有什么想法吗?
答案 0 :(得分:2)
模型中的before_create
回调不会在模型中添加错误。
Use validate
instead of before_create
添加错误,然后您的记录不保存到数据库,@user.save
返回false:
validate :check_name
def check_name
user = User.where(:name => self.name, :place => self.place)
errors.add(:base, "Something wrong") if user.present?
end
如果您想使用before_create
回调添加错误:
before_create :check_name
def check_name
user = User.where(:name => self.name, :place => self.place)
errors.add(:base, "Something wrong") if user.present?
end
更优先使用validate
来代替before_create
。并阅读验证模型和添加错误的方法。
答案 1 :(得分:0)
是。在Create之前只是一个回调,它将在您调用User.save时执行。但是如果你想停止创建记录。你去验证。写你的自定义验证
validates_with:check_name
答案 2 :(得分:0)
你可以在你的模型中添加一个简单的东西:
Test.EmptyIfNull().Where(k => k.number ==2).FirstOrDefault();
并删除所有代码,即before_create及其方法。