1

我有这个 if 条件来检查这个国家是否不在美国

 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 通知......我如何停止这个并添加一个 flash 错误

4

1 回答 1

5

随机添加错误via@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?在添加错误后调用 to ,false但事实并非如此。它还最终清除了您刚刚添加的错误。

你说你不能把它移到模型上,但这确实是合适的地方。您可以在此处查看有关活动记录验证的更多信息。请注意,所有示例都在模型中进行了验证。

于 2012-06-20T01:08:14.913 回答