Ruby on Rails
Geneste vorm in Ruby on Rails
Zoeken…
Een genest formulier instellen in Ruby on Rails
Het eerste ding om te hebben: een model dat een has_many
relatie met een ander model bevat.
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 een geneste vorm kunt u tegelijkertijd onderliggende objecten met een bovenliggend object maken.
<%= 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 %>
Toen we @project
met Project.new
initialiseerden om iets te hebben voor het maken van een nieuw Project
object, op dezelfde manier voor het maken van een Todo
object, moeten we zoiets hebben, en er zijn meerdere manieren om dit te doen:
In
Projectscontroller
kunt u in denew
methode schrijven:@todo = @project.todos.build
of@todo = @project.todos.new
om een nieuwTodo
object te instantiëren.U kunt dit ook doen met het oog op:
<%= f.fields_for :todos, @project.todos.build %>
Voor sterke params kunt u ze op de volgende manier opnemen:
def project_params
params.require(:project).permit(:name, todo_attributes: [:name])
end
Aangezien de Todo
objecten worden gemaakt door een Project
maken, moet u dit ding in het Project
opgeven door de volgende regel toe te voegen:
accepts_nested_attributes_for :todos