Ruby on Rails
Forma anidada en Ruby on Rails
Buscar..
Cómo configurar un formulario anidado en Ruby on Rails
Lo primero que hay que tener: un modelo que contiene una relación has_many con otro modelo.
class Project < ApplicationRecord
has_many :todos
end
class Todo < ApplicationRecord
belongs_to :project
end
En ProjectsController :
class ProjectsController < ApplicationController
def new
@project = Project.new
end
end
En una forma anidada, puede crear objetos secundarios con un objeto principal al mismo tiempo.
<%= 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 %>
Cuando iniciamos @project con Project.new para tener algo para crear un nuevo objeto Project , de la misma manera para crear un objeto Todo , tenemos que tener algo como esto, y hay varias formas de hacerlo:
En
Projectscontroller, en elnewmétodo, puede escribir:@todo = @project.todos.buildo@todo = @project.todos.newpara crear una instancia de un nuevo objetoTodo.También puede hacer esto en la vista:
<%= f.fields_for :todos, @project.todos.build %>
Para parámetros fuertes, puede incluirlos de la siguiente manera:
def project_params
params.require(:project).permit(:name, todo_attributes: [:name])
end
Dado que, los objetos de Todo se crearán a través de la creación de un objeto de Project , por lo que debe especificar esto en el modelo de Project agregando la siguiente línea:
accepts_nested_attributes_for :todos