Ruby on Rails
Вложенная форма в Ruby on Rails
Поиск…
Как установить вложенную форму в 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
объекта, мы должны иметь что - то вроде этого, и есть несколько способов сделать это:
В
Projectscontroller
, вnew
методе, вы можете написать:@todo = @project.todos.build
или@todo = @project.todos.new
для создания экземпляра новогоTodo
объекта.Вы также можете сделать это в поле зрения:
<%= 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