Mam więc metodę w modelu rezerwacji o nazwie add_equip. Ta metoda sprawdza, czy dodany element wyposażenia jest ważny (nie koliduje z inną rezerwacją).Szyny - Pobieranie komunikatu o błędzie z modelu, który nie jest błędem sprawdzania poprawności
Kontrola działa. Jeśli dodany ekwipunek nie powinien być dodany, to nie jest, a jeśli tak, powinien.
Problem polega na tym, że nie mogę określić sposobu wysłania wiadomości z powrotem do kontrolera, aby umieścić go w wiadomości flash? Wiem, że muszę czegoś tutaj przegapić, ale mam google przez kilka godzin i nie mogę znaleźć żadnych jasnych wyjaśnień, jak przekazywać błędy z powrotem do kontrolera, chyba że są to błędy sprawdzania poprawności.
add_equip w 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 w rezerwacji modelu
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
Każda pomoc będzie mile widziana. Wiem, że tu brakuje czegoś podstawowego.
Dzięki dodaniu ".full_messages.Zrozumiałem, że muszę czegoś głupio przegapić – raytiley
Używanie model.errors.full_messages w wiadomości flash jest IMHO złym sposobem na rozwiązanie tego problemu. 'error_messages_for: model' to konwencjonalny sposób wyświetlania komunikatów o błędach, Właściwym sposobem rozwiązania problemu byłoby umieszczenie błędu na equip_id zamiast na bazie, a następnie renderowanie akcji formularza edycyjnego Brak przekierowań potrzebne –
To jest dobry punkt, lepiej byłoby ponownie renderować strona –