【问题标题】:Input as check boxes is not showing validation error输入为复选框未显示验证错误
【发布时间】:2016-04-28 14:43:03
【问题描述】:

由于某种原因,当我告诉简单表单呈现输入 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 字段没有发生同样的情况。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 跟进——你可以用:include_hidden =&gt; false关闭默认的空字符串
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2018-03-14
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多