Ruby on Rails
Verschachtelte Form in Ruby on Rails
Suche…
So erstellen Sie ein verschachteltes Formular in Ruby on Rails
Das Erste, was zu haben ist: ein Modell, das eine has_many Beziehung zu einem anderen Modell enthält.
class Project < ApplicationRecord
has_many :todos
end
class Todo < ApplicationRecord
belongs_to :project
end
In ProjectsController :
class ProjectsController < ApplicationController
def new
@project = Project.new
end
end
In einem verschachtelten Formular können Sie gleichzeitig untergeordnete Objekte mit einem übergeordneten Objekt erstellen.
<%= nested_form_for @project do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<% # Now comes the part for `Todo` object %>
<%= f.fields_for :todo do |todo_field| %>
<%= todo_field.label :name %>
<%= todo_field.text_field :name %>
<% end %>
<% end %>
Da wir @project mit Project.new initialisiert haben, um etwas zum Erstellen eines neuen Project Objekts zu haben, genauso wie zum Erstellen eines Todo Objekts, müssen wir etwas Ähnliches haben, und es gibt mehrere Möglichkeiten, dies zu tun:
In
Projectscontrollerkönnen Sie in dernewMethode@todo = @project.todos.buildschreiben:@todo = @project.todos.buildoder@todo = @project.todos.new, um ein neuesTodoObjekt zu instantiieren.Sie können dies auch in der Ansicht tun:
<%= f.fields_for :todos, @project.todos.build %>
Für starke Params können Sie sie auf folgende Weise hinzufügen:
def project_params
params.require(:project).permit(:name, todo_attributes: [:name])
end
Da die Todo Objekte durch die Erstellung eines Project werden, müssen Sie dies in Project model angeben, indem Sie die folgende Zeile hinzufügen:
accepts_nested_attributes_for :todos