Alles funktioniert gut, aber ich möchte den Code ändern in erstellen Aktion zu etwas wie in Update Aktion. Gerade jetzt, in der Create-Aktion durchlaufe ich alle Werte und speichere sie, aber ich möchte es in einer einzigen Zeile machen.Rails verschachtelte Form - Refactor create action | Kokon Edelstein
Ich habe ein College-Modell.
class College< ActiveRecord::Base
has_many :staffs, dependent: :destroy
accepts_nested_attributes_for :staffs, reject_if: :all_blank, allow_destroy: true
end
Und das ist mein Staff.rb
class Staff < ActiveRecord::Base
belongs_to :college
end
Und das sind meine Staffs Controller erstellen und Update Aktionen
def create
@college= College.find(params[:college][:id_college_profile]
)
staff_params = params[:college][:staffs_attributes].values
staff_params.each do |staff_param|
@staff = @college.staffs.new
@staff.name = staff_param[:name]
@staff.designation = staff_param[:designation]
@staff.experience = staff_param[:experience]
@staff.specialization = staff_param[:specialization]
@staff.save
end
redirect_to dashboard_path(id: @college.id), notice: "Successfully added Staff."
end
def update
@college= College.find(params[:college][:id_college]
)
@college.update_attributes(staff_parameters)
redirect_to root_path
end
Dies sind starke Parameter
def staff_parameters
params.require(:college).permit(:id, staffs_attributes: [:id, :name, :specialization, :experience, :designation, :_destroy])
end
Gibt es eine Möglichkeit, alle Mitarbeiter in create action zu speichern, ohne alle Werte durchzulaufen, aber alle mit einer einzigen Codezeile wie in der Aktualisierungsaktion zu speichern?
Ich habe schon versucht, diese in den StaffsController Aktion erstellen
def create
@college= College.find(params[:college][:id_college]
)
@staff= @college.staffs.new(staff_parameters)
@staff.save
redirect_to dashboard_path(id: @college.id), notice: "Successfully added Staffs."
end
Aber es wirft diesen Fehler
unknown attribute 'staffs_attributes' for Staff.
Kann mir jemand freundlicherweise mit diesem Problem helfen?
Danke für die Eingabe. Hier ist der Fluss. Der Benutzer meldet sich an. Er wird dann zu einem Formular weitergeleitet. Nach dem Senden wird ein College- Objekt für diesen Benutzer erstellt. Dieses College-Objekt hat Stäbe, Kurse, etc. So in Stäbe Controller, ich erstelle Stäbe für diese bestimmte Hochschule. Und die create Aktion, die ich gepostet habe, ist in StaffsController. – Mahendhar
In diesem Fall gibt es keinen Unterschied zwischen der Bearbeitung und der neuen Aktion, weil Sie immer das Formular für das College rendern und das College speichern, richtig? Ein bisschen verwirrend in Ihren Routen möglicherweise, weil Sie nicht eine einzelne Mitarbeiter erstellen oder bearbeiten, aber ein Haufen, so für mich fühlt sich ein College-Controller ein wenig mehr "Standard" einfallsreich. – nathanvda
Danke @nathanvda. Ich rendere das Bearbeitungsformular für beide neu und bearbeite es jetzt. Ich werde den Code in den CollegesController verschieben. Eine kleine Frage. Ich habe auch "Kurse" für Colleges wie "Staffs". Wenn in Colleges # create, ich habe '@ college.update_attributes (staff_parameters)', wie man die starken Parameter ändert, so dass es auch 'course_parameters' erlaubt, wenn geschachtelte Kursform bearbeitet wird. – Mahendhar