Quindi ho un metodo in un modello di prenotazione chiamato add_equip. Questo metodo esegue alcuni controlli per assicurarsi che il pezzo aggiunto di equipaggiamento sia valido (non in conflitto con un'altra prenotazione).Rails - Ottenere un messaggio di errore dal modello che non è un errore di convalida
Gli assegni funzionano. Se un pezzo aggiuntivo di equipaggiamento non deve essere aggiunto, non lo è, e se lo fosse dovrebbe.
Il problema è che non riesco a capire come inviare i messaggi al controller da inserire nel messaggio flash? So che mi manca qualcosa qui, ma ho cercato su Google per un paio d'ore e non riesco davvero a trovare spiegazioni chiare su come passare gli errori sul controller, a meno che non siano errori di validazione.
add_equip in reservations_controller
def add_equip
@reservation = Reservation.find(params[:id])
@addedEquip = Equip.find(params[:equip_id])
respond_to do |format|
if @reservation.add_equip(@addedEquip)
flash[:notice] = "Equipment was added"
format.html { redirect_to(edit_reservation_path(@reservation)) }
else
flash[:notice] = @reservation.errors
format.html { redirect_to(edit_reservation_path(@reservation)) }
end
end
end
add_equip in riserva modello
def add_equip equip
if self.reserved.find_by_equip_id(equip.id)
self.errors.add_to_base("Equipment Already Added")
return false
elsif !equip.is_available?(self.start, self.end)
self.errors.add_to_base("Equipment Already Reserved")
return false
else
r = Reserved.new
r.reservation = self
r.equip = equip
r.save
end
end
Qualsiasi aiuto sarebbe molto apprezzato. So che mi manca qualcosa di base qui.
Grazie di aver aggiunto ".full_messages.to_sentance "ha fatto il trucco, sapevo che mi mancava qualcosa di stupido – raytiley
L'uso di model.errors.full_messages in un messaggio flash IMHO è un modo scadente per risolvere questo problema. 'error_messages_for: model' è il modo convenzionale per visualizzare i messaggi di errore, come il modo corretto per risolvere il problema sarebbe quello di inserire l'errore su equip_id invece che su base e quindi semplicemente eseguire l'azione del modulo di modifica. Non sono necessari reindirizzamenti –
Questo è un buon punto, sarebbe meglio effettuare nuovamente il rendering la pagina –