Ich habe eine Rails 4 App. In dieser App habe ich mehrere HABTM-Beziehungen zwischen verschiedenen Modellen. Zum Beispiel kann eine Aufgabe viele Lernziele sowie viele damit verbundene Aufgaben haben. Im Moment habe ich das Bearbeitungsformular im modalen Dialog, das den Aufgabensatz bearbeitet und über den edit_task_path (@task) aufgerufen wird, der den Datensatz aktualisiert. Ich möchte ein neues Formular erstellen, das auch die Aktualisierungsaktion ausführt. Ich möchte jedoch nur, dass dieses Formular für die Aktualisierung der Zuordnungen für die Aufgaben verwendet wird. Meine Hauptfrage lautet: Wie erstelle und rufe ich ein zweites Formular auf, um zu der Aktualisierungsaktion für denselben Datensatz zu routen? Ich möchte grundsätzlich einen update_task_path (@task), der auch die Update-Controller-Aktion behandelt. Ich habe verschiedene Stack-Überläufe untersucht, und keiner adressiert ein neues Formular für die Update-Controller-Aktion.Ein neues Formular zum Aktualisieren eines Datensatzes in Rails 4
0
A
Antwort
1
Da Sie an den gleichen Ort routen müssen Sie nicht wirklich etwas anderes tun als eine separate Form teilweise. Ich nehme an, dass die Aufgabe an dem Punkt gültig sein müsste, an dem Sie die Assoziationen ändern, und die Assoziationen wären gültig (oder Sie haben nichts, um assoziierte Objekte zu validieren), sonst würde bei einem Fehler das Hauptformular gerendert Sie haben den Controller eingesetzt.
# main_form
<%= form_for @task do |f| %>
<div class="field">
<%= f.label :name %>
<%= f.text_field :name %>
</div>
<% end %>
# mission_and_learning_objective_form
<%= form_for @task do |f| %>
<div class="field">
<%= f.collection_check_boxes :mission_ids, Mission.all, :id, :name %>
</div>
<div class="field">
<%= f.collection_check_boxes :learning_objective_ids, LearningObjective.all, :id, :name %>
</div>
<% end %>
Sie sich anschauen sollten dafür nur einen separaten Controller mit obwohl
Routen
resources :task_settings, only: [:edit, :update]
-Controller
class TaskSettingsController < ApplicationController
def edit
@task = Task.find(params[:id])
end
def update
@task = Task.find(params[:id])
if @task.update(task_setting_params)
redirect_to @task, notice: "Settings Updated"
else
render :edit
end
end
private
def task_setting_params
params.require(:task).permit(mission_ids: [], learning_objective_ids: [])
end
end
Ansicht
# task_settings/edit
<%= form_for @task, url: task_setting_path(@task) do |f| %>
<div class="field">
<%= f.collection_check_boxes :mission_ids, Mission.all, :id, :name %>
</div>
<div class="field">
<%= f.collection_check_boxes :learning_objective_ids, LearningObjective.all, :id, :name %>
</div>
<% end %>
Für mich ist ein separater Controller ein bisschen sauberer, besonders wenn Sie ein anderes Verhalten haben wollen, wenn Sie nur die Verknüpfungen aktualisieren.
Verwandte Themen
- 1. JDBC-Code zum Einfügen eines neuen Datensatzes und zum Aktualisieren eines vorhandenen Datensatzes
- 2. Unscope eines verknüpften Datensatzes in Rails 3
- 3. Duplizieren eines Datensatzes in Rails 3
- 4. elm - Aktualisieren eines Datensatzes in einem Datensatz
- 5. MVC-Formular zum Aktualisieren eines Bildes
- 6. Rails 4 - Benutzerberechtigungen aktualisieren
- 7. Rails allgemeine Methode zum Aktualisieren eines Datenbankfelds
- 8. zum Abrufen eines bestimmten Datensatzes
- 9. Aktualisieren eines Datensatzes mit Linq-to-SQL
- 10. Render ein anderes neues Formular
- 11. Wie öffne ich ein schnelles Formular zum Bearbeiten eines Datensatzes Dynamics CRM?
- 12. SQL-Abfrage zum Aktualisieren des übergeordneten Datensatzes mit untergeordneten Datensatzwerten
- 13. Rails 4 Turbolinks machen Formular reichen mehrmals
- 14. Schienen 4: Stop Umleitung nach erstellen oder aktualisieren Formular
- 15. Rails 4 Formular ohne Modell und Datenbank
- 16. Hinzufügen eines Datensatzes zu einer Junction-Tabelle beim Aktualisieren eines Datensatzes
- 17. Standardmethode zum Aktualisieren eines Abonnements in Braintree?
- 18. Formular loswerden und nur Schaltfläche zum Erstellen eines neuen Datensatzes verwenden
- 19. MVC und Lambda zum Erstellen eines Datensatzes
- 20. "ORA-00903: ungültiger Tabellenname" Fehler beim Aktualisieren eines Datensatzes
- 21. Aktualisieren und Löschen eines Datensatzes innerhalb des Objekts
- 22. Wie kann ich den Wert eines Datensatzes mit Ruby on Rails 4.0.1/PostgreSQL Hstore aktualisieren?
- 23. Rails uploads für neues Objekt
- 24. Etikettieren eines gestapelten Datensatzes
- 25. Ziehen eines TButton vom Formular zum Formular
- 26. Kopieren eines Datensatzes in VBA
- 27. Hinzufügen und Aktualisieren eines Datensatzes programmgesteuert mit .NETCF
- 28. Aktualisieren Sie ein geschachteltes Formular
- 29. Ember.js - Hinzufügen eines Datensatzes zum Speichern bei Verwendung von store.query?
- 30. Verwenden von MS Access Trigger und/oder Abfragen zum Einfügen oder Aktualisieren eines Datensatzes
Sorry, habe vergessen, die URL zum Formular hinzuzufügen. –
Oh, das macht Sinn! Meine einzige Frage ist, wie man den Edit-Pfad verwendet, um zwei Anrufe 2 verschiedene Formulare anzurufen? Ich bin neu in Ruby on Rails. Ich lehne mich dem Einstellungs-Controller zu, ich versuche nur, beide Optionen zu ändern, da ich auch Einstellungs-Controller für ungefähr 4 andere Modelle machen muss. –
Sie hätten zwei getrennte Pfade. '<% = link_to" Edit ", edit_task_path (@task)%>' und '<% = link_to" Taskeinstellungen bearbeiten ", edit_task_setting_path (@task)%>'. Beachten Sie, dass Sie sie wie gewünscht aufrufen können, es müssen keine Einstellungen sein. Ich konnte mir einfach kein gutes Team vorstellen, um Missionen und Lernziele zu gruppieren. –