Me gustaría saber cuál es la forma "correcta" de inicializar los campos anidados de un modelo.Forma correcta de inicializar campos anidados en formularios Rails
Digamos que usted tiene algunos campos anidados para un modelo:
class User
has_one :address
accepts_nested_attributes_for :address
end
y que necesita para inicializar los atributos (address
en este caso) para utilizarlos en una llamada fields_for
.
Hasta ahora he pensado en tres formas de hacerlo.
En primer lugar, after_initialize
gancho en el modelo:
class User
after_initialize :init_address
protected
def init_address
address ||= build_address
end
entonces tenemos la inicialización en el controlador:
class UsersController
def new
@user = User.new
@user.build_address
end
end
Y, por último, podemos tener un método de ayuda a hacerlo por nosotros:
module FormHelpers
def setup_user(user)
user.address ||= user.build_address
user
end
end
# view
<%= form_for setup_user(@user)... %>
¿Hay algo que se parezca a un estándar o una "mejor es el escenario? ¿Cómo lo haces y por qué?
En la falta de una solución mejor, terminé escribiendo una joya que se encarga de esto: https://github.com/febuiles/auto_build –
Parece una publicación anterior. ¿Qué versión de Rails estás usando? –