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:

  1. W Projectscontroller , w new metodzie, możesz napisać: @todo = @project.todos.build @todo = @project.todos.new lub @todo = @project.todos.new aby utworzyć instancję nowego obiektu Todo .

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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow