Ruby on Rails
Formulaire imbriqué en Ruby on Rails
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:
Dans
Projectscontroller
, dans lanew
méthode, vous pouvez écrire:@todo = @project.todos.build
ou@todo = @project.todos.new
pour instancier un nouvel objetTodo
.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