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
Projectscontroller
können Sie in dernew
Methode@todo = @project.todos.build
schreiben:@todo = @project.todos.build
oder@todo = @project.todos.new
, um ein neuesTodo
Objekt 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