出于某种原因,当我告诉简单表单呈现输入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
字段上没有发生同样的情况。
如果有任何不清楚或我需要提供更多信息,请告诉我。任何帮助将不胜感激!
答案 0 :(得分:0)
事实证明,验证工作一直都在进行!该字段的默认值为空字符串,“在线状态”必须视为有效。
我现在的解决方案是编写一个自定义验证,检查以确保该字段是一个数组,并且该字段大小不等于1。如果是,则必须表示用户未选择任何值。