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:

  1. In Projectscontroller können Sie in der new Methode @todo = @project.todos.build schreiben: @todo = @project.todos.build oder @todo = @project.todos.new , um ein neues Todo Objekt zu instantiieren.

  2. 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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow