【发布时间】:2012-09-18 15:05:27
【问题描述】:
在构建自定义验证时,我无法显示 error_messages.html.erb 部分。
例如,我有一个用于进行交易的表单,其开头如下:
<%= form_for @transaction do |f| %>
<%= render 'shared/error_messages', :object => f.object %>
我有一个验证可以防止用户与自己进行交易:
validate :self_transaction_not_possible
与
def self_transaction_not_possible
bel = Belonging.find_by_id(self.belonging.id)
unless bel.nil?
if self.user_id == bel.user_id
errors.add(:base, "You cannot perform a transaction with yourself")
end
end
end
然后我在浏览器中运行了这样一个示例(在我拥有的所有物上启动事务),并在 self_transaction_not_possible 中放置了一个调试器。我检查了验证是否发生,实际上,在调试器中,我看到输入:self.errors.full_messages 给了我错误消息,因此似乎执行了验证...
然后我会期望,因为对象无效,错误消息会出现在我的视图中,但是没有......将调试器放在 error_messages.html.erb 部分中向我显示 object.errors.any 仍然 = = {} :-/ ...
当保存过程失败(验证已正确执行)时,用户将被重定向到它应该看到的页面,但他从未看到错误消息......
我是否遗漏了一些明显的东西? ...
【问题讨论】:
-
很难区分您的输入错误和真正的错误:
<%= form_for @transaction, do |f| %>- 逗号在这里做什么?<%= render 'shared/error_messages'; :object => f.object %>- 你为什么把分号放在这里?unless bel.nil ?-nil后面的空格是故意的吗?等等…… -
@jdoe:好的,我输入得太快了,由于网络问题,我无法进行复制/粘贴。无论如何,问题现在没有错字(我希望)......
标签: ruby-on-rails forms validation