rails not method gema función for español ejemplos cuál could ruby-on-rails devise

ruby on rails - not - Anular controlador de registro de dispositivos



devise rails español (6)

Creo que hay una solución mejor que volver a escribir el RegistrationsController. Hice exactamente lo mismo (solo tengo Organización en lugar de Empresa).

Si configura correctamente su forma anidada, a nivel de modelo y vista, todo funciona a la perfección.

Mi modelo de usuario:

class User < ActiveRecord::Base # Include default devise modules. Others available are: # :token_authenticatable, :confirmable, :lockable and :timeoutable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable has_many :owned_organizations, :class_name => ''Organization'', :foreign_key => :owner_id has_many :organization_memberships has_many :organizations, :through => :organization_memberships # Setup accessible (or protected) attributes for your model attr_accessible :email, :password, :password_confirmation, :remember_me, :name, :username, :owned_organizations_attributes accepts_nested_attributes_for :owned_organizations ... end

Mi modelo de organización:

class Organization < ActiveRecord::Base belongs_to :owner, :class_name => ''User'' has_many :organization_memberships has_many :users, :through => :organization_memberships has_many :contracts attr_accessor :plan_name after_create :set_owner_membership, :set_contract ... end

Mi punto de vista: ''devise / registrations / new.html.erb''

<h2>Sign up</h2> <% resource.owned_organizations.build if resource.owned_organizations.empty? %> <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %> <%= devise_error_messages! %> <p><%= f.label :name %><br /> <%= f.text_field :name %></p> <p><%= f.label :email %><br /> <%= f.text_field :email %></p> <p><%= f.label :username %><br /> <%= f.text_field :username %></p> <p><%= f.label :password %><br /> <%= f.password_field :password %></p> <p><%= f.label :password_confirmation %><br /> <%= f.password_field :password_confirmation %></p> <%= f.fields_for :owned_organizations do |organization_form| %> <p><%= organization_form.label :name %><br /> <%= organization_form.text_field :name %></p> <p><%= organization_form.label :subdomain %><br /> <%= organization_form.text_field :subdomain %></p> <%= organization_form.hidden_field :plan_name, :value => params[:plan] %> <% end %> <p><%= f.submit "Sign up" %></p> <% end %> <%= render :partial => "devise/shared/links" %>

Agregué un campo al formulario de registro que se basa en un modelo diferente, vea ¿Cómo uso los atributos anidados con el modelo de dispositivo para los detalles escabros? Esta parte está funcionando bien.

El problema ahora es cuando guardo, está fallando en la acción de creación del controlador de registros que proporciona el Activerecord::UnknownAttributeError con un Activerecord::UnknownAttributeError en este campo (empresa).

Supongo que necesito anular el controlador de registros, o ¿hay alguna forma mejor / más fácil en la que deba acercarme a esto?


En su formulario, ¿está pasando algún otro atributo, a través de una asignación en masa que no pertenezca a su modelo de usuario, o cualquiera de los modelos anidados?

Si es así, creo que ActiveRecord :: UnknownAttributeError se activa en esta instancia.

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 dile al dispositivo que use ese controlador en lugar del predeterminado con:

# app/config/routes.rb devise_for :users, :controllers => {:registrations => "registrations"}


Métodos muy simples. Solo ve a la terminal y el siguiente tipo.

rails g devise:controllers users //This will create devise controllers in controllers/users folder

Siguiente para usar vistas personalizadas

rails g devise:views users //This will create devise views in views/users folder

ahora en tu archivo route.rb

devise_for :users, controllers: { :sessions => "users/sessions", :registrations => "users/registrations" }

Usted puede agregar otros controladores también. Esto hará que el dispositivo utilice los controladores en la carpeta de usuarios y las vistas en la carpeta de usuarios.

Ahora puede personalizar sus vistas como desee y agregar su lógica a los controladores en la carpeta de controladores / usuarios. Disfrutar


Puede generar vistas y controladores para la personalización del dispositivo.

Utilizar

rails g devise:controllers users -c=registrations

y

rails g devise:views

Copiará controladores y vistas particulares de gemas a su aplicación.

A continuación, dile al enrutador que use este controlador:

devise_for :users, :controllers => {:registrations => "users/registrations"}


Una forma mejor y más organizada de anular los controladores y vistas de Devise utilizando espacios de nombres:

Crea las siguientes carpetas:

app/controllers/my_devise app/views/my_devise

Coloque todos los controladores que desee reemplazar en app / controllers / my_devise y agregue el espacio de nombres MyDevise nombres de clase del controlador. Ejemplo de Registrations :

# app/controllers/my_devise/registrations_controller.rb class MyDevise::RegistrationsController < Devise::RegistrationsController ... def create # add custom create logic here end ... end

Cambia tus rutas en consecuencia:

devise_for :users, :controllers => { :registrations => ''my_devise/registrations'', # ... }

Copie todas las vistas requeridas en la app/views/my_devise desde la carpeta de gemas Devise o use los rails generate devise:views app/views/my_devise rails generate devise:views , elimine las vistas que no está anulando y cambie el nombre de la carpeta del my_devise a my_devise .

De esta manera tendrás todo perfectamente organizado en dos carpetas.


cree los registros del controlador y anule su clase heredada por la clase Devise :: RegistrationsController predefinida

# 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

después de esto se establecen rutas para:

# app/config/routes.rb devise_for :users, :controllers => {:registrations => "registrations"}