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