Ruby on Rails
Zagnieżdżona forma w Ruby on Rails
Szukaj…
Jak skonfigurować zagnieżdżoną formę w Ruby on Rails
Najpierw trzeba: model zawierający relację has_many
z innym modelem.
class Project < ApplicationRecord
has_many :todos
end
class Todo < ApplicationRecord
belongs_to :project
end
W ProjectsController
:
class ProjectsController < ApplicationController
def new
@project = Project.new
end
end
W formie zagnieżdżonej można jednocześnie tworzyć obiekty podrzędne z obiektem nadrzędnym.
<%= 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 %>
Gdy zainicjalizowaliśmy @project
pomocą Project.new
aby mieć coś do utworzenia nowego obiektu Project
, w ten sam sposób do utworzenia obiektu Todo
, musimy mieć coś takiego i istnieje wiele sposobów:
W
Projectscontroller
, wnew
metodzie, możesz napisać:@todo = @project.todos.build
@todo = @project.todos.new
lub@todo = @project.todos.new
aby utworzyć instancję nowego obiektuTodo
.Możesz to również zrobić w widoku:
<%= f.fields_for :todos, @project.todos.build %>
W przypadku silnych parametrów możesz je uwzględnić w następujący sposób:
def project_params
params.require(:project).permit(:name, todo_attributes: [:name])
end
Ponieważ obiekty Todo
zostaną utworzone poprzez utworzenie obiektu Project
, więc musisz określić tę rzecz w modelu Project
, dodając następujący wiersz:
accepts_nested_attributes_for :todos