Ruby on Rails
Modulo annidato in Ruby on Rails
Ricerca…
Come configurare un modulo annidato in Ruby on Rails
La prima cosa da avere: un modello che contiene una relazione has_many con un altro modello.
class Project < ApplicationRecord
has_many :todos
end
class Todo < ApplicationRecord
belongs_to :project
end
In ProjectsController :
class ProjectsController < ApplicationController
def new
@project = Project.new
end
end
In un modulo annidato, è possibile creare oggetti figlio con un oggetto genitore allo stesso tempo.
<%= 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 %>
Come abbiamo inizializzato @project con Project.new per avere qualcosa per creare un nuovo oggetto Project , allo stesso modo per creare un oggetto Todo , dobbiamo avere qualcosa di simile, e ci sono diversi modi per farlo:
In
Projectscontroller, in unnewmetodo, puoi scrivere:@todo = @project.todos.buildo@todo = @project.todos.newper istanziare un nuovo oggettoTodo.Puoi anche farlo in vista:
<%= f.fields_for :todos, @project.todos.build %>
Per i parametri forti, puoi includerli nel modo seguente:
def project_params
params.require(:project).permit(:name, todo_attributes: [:name])
end
Poiché, gli oggetti Todo verranno creati mediante la creazione di un oggetto Project , quindi devi specificare questa cosa nel modello Project aggiungendo la seguente riga:
accepts_nested_attributes_for :todos