【问题标题】:error_message partial not rendered in Rails错误消息部分未在 Rails 中呈现
【发布时间】: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 仍然 = = {} :-/ ...

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

我是否遗漏了一些明显的东西? ...

【问题讨论】:

  • 很难区分您的输入错误和真正的错误:&lt;%= form_for @transaction, do |f| %&gt; - 逗号在这里做什么? &lt;%= render 'shared/error_messages'; :object =&gt; f.object %&gt; - 你为什么把分号放在这里? unless bel.nil ? - nil 后面的空格是故意的吗?等等……
  • @jdoe:好的,我输入得太快了,由于网络问题,我无法进行复制/粘贴。无论如何,问题现在没有错字(我希望)......

标签: ruby-on-rails forms validation


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2016-07-06
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多