Ci sono state molte domande a riguardo, ma nessuna sembra essere di aiuto. E sì, ho visto this rails cast.Convalida del modello annidata - gli errori non vengono visualizzati
Ho un autore che ha molti libri, in questo modo:
Autore:
class Author < ActiveRecord::Base
attr_accessible :name
has_many :books, dependent: :destroy
accepts_nested_attributes_for :books, allow_destroy: true
validates :name, presence: true
validates :name, length: { minimum: 3 }
end
libro:
class Book < ActiveRecord::Base
attr_accessible :name, :year
belongs_to :author
validates :name, :year, presence: true
validates :year, numericality: { only_integer: true, less_than_or_equal_to: Time.now.year }
end
ho creato il seguente modulo per aggiungere un libro da un autore negli autori # show:
<%= form_for([@author, @book], html: { class: "well" }) do |f| %>
<% if @book.errors.any? %>
<div class="alert alert-block">
<ul>
<% @author.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
#labels and buttons...
<% end %>
... con il seguente metodo authors_controller:
def show
@author = Author.find(params[:id])
@book = @author.books.build
end
... e il seguente metodo books_controller:
def create
@author = Author.find(params[:author_id])
if @author.books.create(params[:book])
redirect_to author_path(@author)
else
render action: :show
end
end
io non riesco a capire perché il modulo non visualizza alcun messaggio di errore. Ho seguito l'esempio dei railscast in cui si dice che ci dovrebbe essere una variabile di istanza di libri nel modulo anziché @ author.books.build, quindi ho inserito quest'ultimo nel controller e @book nel modulo - ancora inutilmente.
Grazie per qualsiasi aiuto!
Grazie per questa risposta dettagliata già! Non ho un nuovo metodo nel controller dei libri: il modulo per un nuovo libro viene visualizzato quando viene mostrato un autore. Inoltre, quando cambio i libri # crea il metodo come suggerito, ricevo un errore di routing che dice che non è possibile trovare il metodo di modifica. Cosa devo fare in modo diverso per risolvere questo problema? – weltschmerz
Ho dimenticato di cambiare il reindirizzamento a: nuovo. Il design RESTful standard (non necessariamente il miglior design) è come ho descritto, dove ci sarebbe una nuova pagina per i libri. Se vuoi che funzioni in modo diverso, cerca di capire cosa non ha funzionato e risolvilo nel modo desiderato. –