我的问题如下:
我有一个表单视图,需要在提交后显示成功和失败图标。 在提交之前,只需要显示没有成功和失败图标的表单。
当形式如下时,我们可以通过多种方式实现这一目标:
<%= 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方法来检查验证过程是否已完成?
答案 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条件来检查该属性的值并渲染刻度线和交叉。显然,这不是很漂亮,你应该只使用有效的?和错误?助手。