2016-04-28 13 views
0

Aus irgendeinem Grund, wenn ich einfaches Formular, um die Eingabe as: :check_boxes zu präsentieren, wird die Validierung nicht angezeigt.Eingabe als Kontrollkästchen zeigt nicht Validierungsfehler

Ich habe die Validierung getestet sicherzustellen, dass es in Rails-Konsole funktioniert:

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!"] 

ich, dass die Validierung auch überprüfte Ich habe durch Umschalten der Eingabe wieder auf das Standardauswahlmenü und die Fehleranzeigen arbeite gut dort. Ich möchte jedoch, dass Benutzer mehrere Eingaben auswählen.

Hier sind einige Stücke des Puzzles:

Modell:

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

Formularansicht:

<%= 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 %> 

Controller:

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 

Was komisch ist, ist, dass es das '*' hinzufügt, um dem Benutzer mitzuteilen, dass das Eingabefeld erforderlich ist.

Bearbeiten: In anderen Feldern, in denen das Validierungsfeld angezeigt wird, gibt es eine Klasse mit dem Namen has-error, die nach der Übermittlung generiert wird. Nicht sicher, warum das nicht auf dem Feld :check_boxes geschieht.

Wenn etwas unklar ist oder ich weitere Informationen liefern muss, lass es mich wissen. Jede Hilfe würde sehr geschätzt werden!

Antwort

0

Es stellte sich heraus, dass die Validierungen die ganze Zeit funktionierten! Der Standardwert für das Feld ist eine leere Zeichenfolge, die von 'presidence' als gültig betrachtet werden muss.

Meine Lösung war im Moment, eine benutzerdefinierte Validierung zu schreiben, die überprüft, um sicherzustellen, dass das Feld ein Array ist und dass die Größe ungleich eins ist. Wenn dies der Fall ist, bedeutet dies, dass der Benutzer keine Werte ausgewählt hat.

+0

Nachverfolgung - Sie können die leere Standardzeichenfolge mit ': include_hidden => false 'ausschalten – nkulig

Verwandte Themen