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

时间:2016-04-28 14:43:03

标签: validation ruby-on-rails-4 activerecord simple-form

出于某种原因,当我告诉简单表单呈现输入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!"]

我还验证了我的验证工作是将输入切换回默认选择菜单,错误显示在那里。但是,我希望用户选择多个输入。

以下是这个难题的一些部分:

型号:

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

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

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

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

1 个答案:

答案 0 :(得分:0)

事实证明,验证工作一直都在进行!该字段的默认值为空字符串,“在线状态”必须视为有效。

我现在的解决方案是编写一个自定义验证,检查以确保该字段是一个数组,并且该字段大小不等于1。如果是,则必须表示用户未选择任何值。