为什么不能在我的rails控制器中工作

时间:2012-06-20 00:54:32

标签: ruby-on-rails ruby ruby-on-rails-3

我有这个条件,检查该国家是否不在美国

 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错误

1 个答案:

答案 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的更多信息。请注意,所有示例都在模型中进行了验证。