Dies ist ein dummes Beispiel, aber ich versuche zu verstehen, wie Dinge hinter den Kulissen in Rails weitergegeben werden. Und es gibt wahrscheinlich einen besseren, "Rails", eine Art, sich dem zu nähern ... wenn ja, lass es mich wissen. Ich habe:Rails: Verlieren Flash/Fehler von eingebetteten Formular nach redirect_to
Warren has_many Rabbits
Rabbit belongs_to Warren
Ich listet vorhandene Kaninchen und dann ein Formular für das Hinzufügen eines neuen Kaninchens.
warrens/show.html.haml
%h1 This Warren
%h2 Rabbits
= render @warren.rabbits, :target => @warren
%h2 Add a rabbit:
= render "rabbits/form", :parent => @warren, :foreign_key => :warren_id
= link_to 'Edit', edit_warren_path(@warren)
\|
= link_to 'Back', warrens_path
Es funktioniert. Ich kann Hasen hinzufügen und zerstören, während ich die Show des Warren schaue. Das Problem ist, dass die Flash Nachrichten (:success
, :notice
) und/oder die rabbit.errors
nicht auf/in der Ansicht angezeigt werden. Jetzt bin ich nicht mit accepts_nested_attributes_for
in meinem warren.rb-Modell. aber das ist meist arbeiten. Lernen Rails so fragen, was auf und geht, wie meine Nachrichten sanft fließende bekommen ...
Kaninchen/_form.html.haml
= form_for ([parent, parent.rabbits.build]) do |f|
= render "shared/error_messages", :target => parent
.field
= f.label :name
= f.text_field :name
.field
= f.label :color
= f.text_field :color
.field
= f.hidden_field foreign_key
.actions
= f.submit 'Save'
Layouts/application.html.haml
!!!
%html
%head
...
%body
.container
- flash.each do |key, value|
%div{ :class => ['flash', key] }= value
= yield
rabbits_controller.rb
class RabbitsController < ApplicationController
def create
@warren = Warren.find(params[:warren_id])
@rabbit = @warren.rabbits.create(params[:rabbit])
redirect_to @warren
end
def destroy
@warren = Warren.find(params[:warren_id])
@rabbit = @warren.rabbits.find(params[:id])
@rabbit.destroy
redirect_to @warren
end
shared/_error_messages.html.haml
-if target.errors.any?
#error_explanation
%h2= "#{pluralize(target.errors.count, "error")} prohibited this record from being saved:"
%ul
- target.errors.full_messages.each do |msg|
%li= msg
Ich sehe nicht, wo Sie Flash-Nachrichten einstellen ... Sollte in Kaninchen-Controller.rb sein. – Brian
yup! hab das jetzt. Vielen Dank! kämpft immer noch mit den ** Fehlermeldungen **. – Meltemi