Recherche…


Comment configurer un formulaire imbriqué dans Ruby on Rails

Le premier à avoir: un modèle contenant une relation has_many avec un autre modèle.

class Project < ApplicationRecord
  has_many :todos
end

class Todo < ApplicationRecord
  belongs_to :project
end

Dans ProjectsController :

class ProjectsController < ApplicationController
  def new
    @project = Project.new
  end
end

Dans un formulaire imbriqué, vous pouvez créer des objets enfants avec un objet parent en même temps.

<%= 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 %>

Comme nous avons initialisé @project avec Project.new pour avoir quelque chose pour créer un nouvel objet Project , de la même manière pour créer un objet Todo , nous devons avoir quelque chose comme ça, et il y a plusieurs façons de le faire:

  1. Dans Projectscontroller , dans la new méthode, vous pouvez écrire: @todo = @project.todos.build ou @todo = @project.todos.new pour instancier un nouvel objet Todo .

  2. Vous pouvez aussi le faire dans la vue: <%= f.fields_for :todos, @project.todos.build %>

Pour les paramètres forts, vous pouvez les inclure de la manière suivante:

def project_params
  params.require(:project).permit(:name, todo_attributes: [:name])
end

Depuis, les objets Todo seront créés lors de la création d'un objet Project . Vous devez donc spécifier cette chose dans le modèle de Project en ajoutant la ligne suivante:

accepts_nested_attributes_for :todos


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow