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 lanewméthode, vous pouvez écrire:@todo = @project.todos.buildou@todo = @project.todos.newpour 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