输入为复选框未显示验证错误

Input as check boxes is not showing validation error

出于某种原因,当我告诉简单表单显示输入时 as: :check_boxes 验证没有出现。

我已经测试了验证以确保它在 Rails 控制台中工作:

irb(main):001:0> d = Document.create
   (0.0ms)  BEGIN
   (0.0ms)  ROLLBACK
=> #<Document id: nil, documents: nil, documents_cache: nil, created_at: nil, updated_at: nil, request_id: nil, data_to_other: nil, data_from_id: nil, data_type_id: nil, data_tos: []>
irb(main):002:0> d.errors.full_messages.each { |msg| puts msg }
Data type Please select a format.
Data from Please select a format.
Data tos Please select some formats!
=> ["Data type Please select a format.", "Data from Please select a format.", "Data tos Please select some formats!"]

我还通过将输入切换回默认 select 菜单来验证我的验证是否正常工作,并且错误在那里正常显示。但是,我希望用户 select 多个输入。

这里有一些拼图:

型号:

class Document < ActiveRecord::Base   
  validates :data_tos, :presence => { :message => "Please select some formats!" } 
end

表单视图:

<%= simple_form_for @document do |f| %>
  <%= f.error_notification %>
  <div class="row">
    <div class="col-lg-8 col-md-8 col-sm-8">
      <%= f.input :data_tos, label: "To: ", collection: DataTo.order(:id),
        as: :check_boxes, value_method: :name,
        item_wrapper_class: 'checkbox-inline' %>
    </div>
  </div>
<% end %>

控制器:

class DocumentsController < ApplicationController
  def new
    @document = Document.new
  end

  def create
    authorize Document
    @document = Document.new(document_params)

    respond_to do |format|
      if @document.save
        format.html { redirect_to @document, notice: 'Document was successfully created.' }
        format.json { render :show, status: :created, location: @document }
      else
        format.html { render :new }
        format.json { render json: @document.errors, status: :unprocessable_entity }
      end
    end
  end
end

奇怪的是它确实添加了“*”让用户知道输入字段是必需的。

编辑: 在其他显示验证字段的字段上,有一个class 叫has-error 是提交后生成的。不确定为什么 :check_boxes 字段没有发生同样的情况。

如果有任何不清楚的地方或我需要提供更多信息,请告诉我。任何帮助将不胜感激!

原来验证一直在工作!该字段的默认值为空字符串,'presence' 必须将其视为有效。

目前,我的解决方案是编写一个自定义验证来检查以确保该字段是一个数组并且大小不等于 1。如果是,那一定意味着用户没有选择任何值。