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:

  1. In Projectscontroller , in un new metodo, puoi scrivere: @todo = @project.todos.build o @todo = @project.todos.new per istanziare un nuovo oggetto Todo .

  2. 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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow