Anular el controlador de registros de dispositivos
Agregué un campo al formulario de registro que se basa en un modelo diferente; consulte ¿Cómo uso atributos anidados con el modelo de diseño? para obtener detalles sangrientos. Esta parte está funcionando bien.
El problema ahora es que cuando guardo, falla la acción de creación del controlador de registros que proporciona el dispositivo con un Activerecord::UnknownAttributeError
en este campo (empresa).
Supongo que necesito anular el controlador de registros, ¿o hay una manera mejor o más fácil de abordar esto?
En su formulario, ¿está pasando algún otro atributo, mediante asignación masiva, que no pertenezca a su modelo de usuario ni a ninguno de los modelos anidados?
Si es así, creo que ActiveRecord::UnknownAttributeError se activa en este caso.
De lo contrario, creo que puedes crear tu propio controlador generando algo como esto:
# app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
def new
super
end
def create
# add custom create logic here
end
def update
super
end
end
Y luego dígale al dispositivo que use ese controlador en lugar del predeterminado con:
# app/config/routes.rb
devise_for :users, :controllers => {:registrations => "registrations"}
Una forma mejor y más organizada de anular los controladores y vistas de Devise utilizando espacios de nombres:
Cree las siguientes carpetas:
app/controllers/my_devise
app/views/my_devise
Coloque todos los controladores que desee anular en app/controllers/my_devise y agregue MyDevise
espacio de nombres a los nombres de las clases de controladores. Registrations
ejemplo:
# app/controllers/my_devise/registrations_controller.rb
class MyDevise::RegistrationsController < Devise::RegistrationsController
...
def create
# add custom create logic here
end
...
end
Cambie sus rutas en consecuencia:
devise_for :users,
:controllers => {
:registrations => 'my_devise/registrations',
# ...
}
Copie todas las vistas requeridas desde app/views/my_devise
la carpeta de gemas de Devise o use rails generate devise:views
, elimine las vistas que no está anulando y cambie el nombre devise
de la carpeta my_devise
.
De esta forma tendrás todo ordenado en dos carpetas.