检查属性是否经过验证

时间:2012-07-09 13:55:11

标签: ruby-on-rails-3 validation

我的问题如下:

我有一个表单视图,需要在提交后显示成功和失败图标。 在提交之前,只需要显示没有成功和失败图标的表单。

当形式如下时,我们可以通过多种方式实现这一目标:

<%= form_for @resource do |f| %>
    <div class='<%= set_class @resource, :name %>'>
        Name: <%= f.text_field :name %>
    </div>
<% end %>

检查请求是否为POST:

    def set_class( record, attribute )
        if request.post?
            if record.errors[attribute].any?
                return "FAILED"
            else
                return "SUCCESS"
            end
        end
        # If not submitted, we don't want a class
    end

验证后设置标记(我们可以使用request.post?替换上述解决方案中的record.tried_to_validate):

    class MyModel < ActiveRecord::Base

        after_validation :set_tried_to_validate

        attr_accessor :validated

        def set_validated
            @tried_to_validate = true
        end

    end

但我真的不喜欢这些解决方案..

是否有内部Rails方法来检查验证过程是否已完成?

2 个答案:

答案 0 :(得分:4)

您可以先测试有效性。

@form.valid?

这将在@form上生成存储在“错误”中的错误。要查看特定字段是否存在错误,

@form.errors[:some_field] 

在表单上,​​您可以执行以下操作:

<% if @form.errors[:some_field].empty? %>
  Valid
<% end %>

只要某些字段产生错误,整个表单就会有效!所以你会再次显示表单(:new),你可以'有效'或选中标记。

答案 1 :(得分:0)

我认为您正在寻找类似客户端验证的内容,如果希望验证在表单上显示内联。 http://railscasts.com/episodes/263-client-side-validations

修改

如果要捕获3个阶段,可以保存在数据库中。新建,验证,完成并仅使用回调来保存每个阶段并将默认设置为新。 (您将已验证属性的数据类型更改为字符串)

after_validation更新属性为“验证”

after_save更新属性为“已完成”

然后你可以使用if elsif else条件来检查该属性的值并渲染刻度线和交叉。显然,这不是很漂亮,你应该只使用有效的?和错误?助手。