Quiero crear una estructura de árbol entre dos modelos, Bar y Foo.
Bar tiene muchos Foos
Bar / | \ Foo Foo Foo ¦ Bar / | \ Foo Foo FooBar puede pertenecer opcionalmente a Foo.
Bar tiene muchos Foos, hasta el infinito y más allá...
Configuré cosas como esta, pero no parece sembrar correctamente.
Incluso si comento las validaciones que tengo, aparece el siguiente error:
ActiveRecord::RecordInvalid: Validation failed: Foos bar must existNo puedo entender por qué.
class Bar < ApplicationRecord has_many :foos, inverse_of: :bar accepts_nested_attributes_for :foos end class Foo < ApplicationRecord belongs_to :bar, inverse_of: :foos accepts_nested_attributes_for :bar end class CreateFoos < ActiveRecord::Migration[6.1] def change create_table :foos do |t| t.text :description, null: false t.timestamps end end end class CreateBars < ActiveRecord::Migration[6.1] def change create_table :bars do |t| t.text :description t.references :foo, foreign_key: true, null: true, on_delete: :cascade, on_update: :cascade t.timestamps end end end class AddBarIdToFoosTable < ActiveRecord::Migration[6.1] def change add_reference :foos, :bar, foreign_key: true, null: false, on_delete: :cascade, on_update: :cascade end end Bar.create!([ { description: 'Lorem ipsum...', foos_attributes: [ { description: 'Lorem ipsum...', bar_attributes: { description: 'Lorem ipsum...', foos_attributes: [ { description: 'Lorem ipsum...', bar_attributes: { description: 'Lorem ipsum...', foos_attributes: [ { description: 'Lorem ipsum...' }, { description: 'Lorem ipsum...' }, { description: 'Lorem ipsum...' }, { description: 'Lorem ipsum...' } ] } } ] } } ] } ])ActiveRecord::RecordInvalid: Validation failed: Foos bar must exist
barbar en la declaración de su modelo para Foo está en la asociación belongs_tobelongs_to está validado por presencia por defecto en ciertas versiones de Rails; cambiar belongs_to :bar a belongs_to :bar, optional: true probablemente resolverá su problemaReferencia: https://github.com/rails/rails/pull/18937/files