如何在ActiveRecord Store列上使用simple_form进行验证

时间:2016-05-27 15:09:36

标签: ruby-on-rails activerecord serialization simple-form

在我的模型中,我有以下设置。它正确验证了这些属性,但是在使用simple_form时没有显示验证。

class Node < ActiveRecord::Base
  store :system_settings, accessors: [:attr_1, :attr_2, :attr_3], coder: HashWithIndifferentAccess

  validates :attr_1, presence: true
  validates :attr_2, presence: true
  validates :attr_3, presence: true
end

我的表单设置如下

= simple_form_for @node, html: {class: 'form-horizontal system-settings-form', multipart: true}, remote: true do |f|
  = f.error_notification

  = f.simple_fields_for :system_settings do |s|
    = s.input :attr_1, input_html: {value: f.object.system_settings[:attr_1]}
    = s.input :attr_2, input_html: {value: f.object.system_settings[:attr_2]}
    = s.input :attr_3, input_html: {value: f.object.system_settings[:attr_3]}

我可能没有正确使用表单,因为我不得不强制使用值而不是simple_form来实现它的魔力(我不会想到更好的方法)。有人可以帮我设置此表单以接收这些字段的验证错误吗?

1 个答案:

答案 0 :(得分:0)

您可以在表单的顶部添加一行代码:

<% if @node.errors.any? %>
  <ul>
     <%= s.errors.full_messages.each do |msg| %> 
      <li> <%= msg %></li>
     <% end %>
  </ul>
<% end %>

您可以列出所有错误,也可以只列出第一个错误。错误是一个数组,因此您可以根据需要进行迭代。