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
Projectscontrollerkunt u in denewmethode schrijven:@todo = @project.todos.buildof@todo = @project.todos.newom een nieuwTodoobject 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