1

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 仍然 == {} :-/ ...

然后用户被重定向到保存过程失败时应该看到的页面(验证已正确执行),但他从未看到错误消息......

我错过了一些明显的东西吗?...

4

1 回答 1

1

好的......它失败的原因是因为我在控制器中执行 REDIRECT_TO 时没有保存事务,从而删除了@transaction.errors向量......

将其更改为render :template => 'transactions/edit'解决了我的问题..

当然,很难猜出这个问题:-/ ...

于 2012-09-25T12:31:02.647 回答