Поиск…


Как установить вложенную форму в Ruby on Rails

Первое, что нужно иметь: модель, которая содержит отношение has_many к другой модели.

class Project < ApplicationRecord
  has_many :todos
end

class Todo < ApplicationRecord
  belongs_to :project
end

В ProjectsController :

class ProjectsController < ApplicationController
  def new
    @project = Project.new
  end
end

Во вложенной форме вы можете одновременно создавать дочерние объекты с родительским объектом.

<%= 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 %>

Как мы инициализируемся @project с Project.new иметь что - то для создания нового Project объекта, точно так же для создания Todo объекта, мы должны иметь что - то вроде этого, и есть несколько способов сделать это:

  1. В Projectscontroller , в new методе, вы можете написать: @todo = @project.todos.build или @todo = @project.todos.new для создания экземпляра нового Todo объекта.

  2. Вы также можете сделать это в поле зрения: <%= f.fields_for :todos, @project.todos.build %>

Для сильных параметров вы можете включить их следующим образом:

def project_params
  params.require(:project).permit(:name, todo_attributes: [:name])
end

Поскольку объекты Todo будут созданы с помощью создания объекта Project , вы должны указать эту вещь в модели Project , добавив следующую строку:

accepts_nested_attributes_for :todos


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow