ruby-on-rails - formularios - nested form rails
Formulario anidado en active_admin con opciĆ³n de seleccionar o crear (4)
He encontrado que necesitas hacer 3 cosas.
- Añadir campos semánticos para el formulario.
f.semantic_fields_for :publisher do |j| j.input :name end
- Agregue una declaración nested_belongs_to al controlador
controller do nested_belongs_to :publisher, optional: true end
- Actualice sus parámetros permitidos en el controlador para aceptar los parámetros, utilizando los atributos de palabras clave
permit_params publisher_attributes:[:id, :name]
Espero que esto ayude.
Estamos utilizando active_admin para nuestro backend de administración.
Tenemos un modelo "Aplicación" que: corresponde a modelo "Editor":
class App < ActiveRecord::Base
belongs_to :publisher
end
class Publisher < ActiveRecord::Base
has_many :apps
end
Al crear una nueva entrada para el modelo de "Aplicación" quiero tener la opción de seleccionar un editor existente o (si el editor aún no está creado) crear un nuevo editor en la misma forma (anidada) (o al menos sin saliendo de la pagina).
¿Hay una manera de hacer esto en active_admin?
Esto es lo que tenemos hasta ahora (en admin / app.rb):
form :html => { :enctype => "multipart/form-data" } do |f|
f.inputs do
f.input :title
...
end
f.inputs do
f.semantic_fields_for :publisher do |p| # this is for has_many assocs, right?
p.input :name
end
end
f.buttons
end
Después de horas de búsqueda, agradecería cualquier pista ... ¡Gracias!
La clase form_builder soporta un método llamado has_many
.
f.inputs do
f.has_many :publisher do |p|
p.input :name
end
end
Eso debería hacer el trabajo.
Actualización: releí su pregunta y esto solo permite agregar un nuevo editor, aunque no estoy seguro de cómo seleccionar o crear.
Primero, asegúrese de que en su modelo de Publisher tenga los permisos correctos para el objeto asociado:
class App < ActiveRecord::Base
attr_accessible :publisher_attributes
belongs_to :publisher
accepts_nested_attributes_for :publisher, reject_if: :all_blank
end
Luego en su archivo ActiveAdmin:
form do |f|
f.inputs do
f.input :title
# ...
end
f.inputs do
# Output the collection to select from the existing publishers
f.input :publisher # It''s that simple :)
# Then the form to create a new one
f.object.publisher.build # Needed to create the new instance
f.semantic_fields_for :publisher do |p|
p.input :name
end
end
f.buttons
end
Estoy usando una configuración ligeramente diferente en mi aplicación (una relación has_and_belongs_to_many), pero logré que funcionara para mí. Avísame si este código produce algún error.
Según ActiveAdmin: http://activeadmin.info/docs/5-forms.html
Solo tienes que hacer lo siguiente:
f.input :publisher