2010-09-27 8 views
10

Ich bin neu bei Schienen & versucht, meine erste eingebettete Form einzurichten. Das Formular selbst funktioniert, aber ich kann nicht bestimmen, wie die Validierungsfehlermeldungen an die Ansicht gesendet werden. Ich nahm an, dass f.object.errors Zugriff gewähren würden, aber während die Methode existiert, gibt f.object.errors.count immer 0 zurück und f.object.errors.any? gibt false zurück. Abgesehen davon, dass die tatsächlichen Fehlermeldungen nicht angezeigt werden, funktioniert das Formular wie erwartet - dh es werden keine ungültigen Daten eingefügt und das Formular, bei dem die Validierung fehlgeschlagen ist, zurückgegeben. Modell, Controller & Ansicht unten aufgeführt - jede Hilfe sehr geschätzt.Rails 3: Wie werden Fehlermeldungen in eingebetteter Form angezeigt?

... 
<!-- Form embedded in boards/show.html.erb --> 
<%= form_for([@board, @board.boardthreads.build]) do |f| %> 
    <div class="field"> 
     <%= f.label :title %><br /> 
     <%= f.text_field :title %> 
    </div> 
    <div class="field">  
     <div class="actions"> <%= f.submit %> </div> 
    </div> 
<% end %> 
... 



class Boardthread < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :board 

    validates :user, :presence => true 
    validates :board, :presence => true 
    validates :title, :presence => true 
end 


class BoardthreadsController < ApplicationController 
    def create 

     @board = Board.find(params[:board_id]) 
     @boardthread = @board.boardthreads.new(params[:boardthread]) 
     @boardthread.user = current_user 
     @boardthread.save 
     redirect_to board_path(@board) 

    end 
end 

Antwort

21

Es ist, weil wenn Sie fehlschlugen, bauen Sie wieder ein Objekt in Ihrem embedded_form. Sie müssen das Objekt mit Fehler in Ihrem Formular verwenden.

In Ihrer neuen Aktion müssen Sie Ihr Objekt erstellen und es auf Ihrem embedded_form verwenden. Und während schaffen Sie es verwenden, weil es schon

<%= form_for([@board, @boardthread]) do |f| %> 
    <% @boardthread.errors.full_messages.each do |msg| %> 
     <p><%= msg %></p> 
    <% end %> 
    <div class="field"> 
     <%= f.label :title %><br /> 
     <%= f.text_field :title %> 
    </div> 
    <div class="field">  
     <div class="actions"> <%= f.submit %> </div> 
    </div> 
<% end %> 
5

Zusätzlich definieren Antwort auf Shingara: Sie können auch den Code hinzufügen müssen die Fehler in Ihrem Formular anzuzeigen, someting wie

<ul> 
    <%- @boardthread.errors.full_messages.each do |msg| %> 
    <li><%= msg %></li> 
    <%- end %> 
</ul>` 
Verwandte Themen