我有这个条件,检查该国家是否不在美国
if params[:address][:country] != 'United States'
logger.info "I am in here"
@address.errors.add(:base, "We're sorry, you cant update your address")
@address.errors.add(:country, "We're sorry, you cant update your address")
end
if @address.update_attributes(params[:address])
flash[:notice] = 'Information was successfully updated.'
但我假设如果你在一个对象的基础上添加了一个错误,它就会暂停,但没有任何东西停止更新,闪存通知总是会出现......我如何阻止它并添加一个flash错误
答案 0 :(得分:5)
通过@address.errors.add()
随机添加错误不会导致记录无效。这就是为什么你对update_attributes
的调用仍在发生(而不是抛出验证错误)。据我所知,要正常运行, errors.add()
需要在rails验证机制中发生。否则,你会得到一些奇怪的行为。
例如,请在rails console
# assume a valid record
@address = Address.first
@address.valid? # => true
@address.errors.add(:random_error, "random error")
@address.errors # => {:random_error => ["random error"]}
@address.valid? # => true
@address.errors # => [] - call to valid? caused added error to disappear
在添加错误valid?
之后,您希望拨打false
,但事实并非如此。它最终也会清除您刚刚添加的错误。
你说你不能把它移到模型上,但这确实是正确的地方。您可以查看有关活动记录validations here的更多信息。请注意,所有示例都在模型中进行了验证。