2010-09-27 12 views
10

Sono nuovo alle guide & cercando di impostare il mio primo modulo incorporato. Il modulo stesso funziona, ma non riesco a determinare come inviare messaggi di errore di convalida alla vista. Supponevo che f.object.errors avrebbe fornito l'accesso, ma mentre si dice che il metodo esiste, f.object.errors.count restituisce sempre 0 e f.object.errors.any? restituisce falso. Oltre a non mostrare i messaggi di errore effettivi, il modulo funziona come previsto, ovvero non riesce a inserire dati non validi e a ritornare al modulo che non ha superato la convalida. Modello, controller & visualizzazione elencata di seguito - qualsiasi aiuto molto apprezzato.Rails 3: Come visualizzare i messaggi di errore in forma incorporata?

... 
<!-- 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 

risposta

21

È perché quando non si è riusciti, si crea nuovamente un oggetto nel tuo embedded_form. È necessario utilizzare l'oggetto con errori nel modulo.

Nella nuova azione è necessario creare il proprio oggetto e utilizzarlo su embedded_form. E durante la vostra creare lo si utilizza perché è già definire

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

Oltre a Shingara risposta: Potrebbe anche essere necessario aggiungere il codice per visualizzare gli errori nel modulo, someting come

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