error_message部分未在Rails中呈现

时间:2012-09-18 15:05:28

标签: ruby-on-rails forms validation

在构建自定义验证时,我在显示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遗骸== {}: - / ...

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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