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:

  1. In Projectscontroller kunt u in de new methode schrijven: @todo = @project.todos.build of @todo = @project.todos.new om een nieuw Todo object te instantiëren.

  2. 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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow