Adicionei um campo ao formulário de inscrição com base em um modelo diferente. Consulte Como usar atributos aninhados com o modelo de criação para obter detalhes sangrentos. Esta parte está funcionando bem.
O problema agora é que, quando eu salvo, ele está falhando na ação de criação do controlador de registros que é fornecida pelo fabricante com um Activerecord::UnknownAttributeError
campo (empresa) nesse campo.
Estou assumindo que preciso substituir o controlador de registros ou existe uma maneira melhor / mais fácil de abordar isso?
ruby-on-rails
devise
Craig McGuff
fonte
fonte
Respostas:
No seu formulário, você está passando outros atributos, através de atribuição em massa que não pertence ao seu modelo de usuário ou a nenhum dos modelos aninhados?
Nesse caso, acredito que o ActiveRecord :: UnknownAttributeError é acionado nesta instância.
Caso contrário, acho que você pode criar seu próprio controlador, gerando algo como isto:
E diga ao dispositivo para usar esse controlador em vez do padrão com:
fonte
rails generate devise:views
e no Rails 2 (eu acho) é:script/generate devise:views
paths.app.views << "app/views/devise"
suasconfig/application.rb
.Uma maneira melhor e mais organizada de substituir os controladores e visualizações do Devise usando espaços de nome:
Crie as seguintes pastas:
Coloque todos os controladores que você deseja substituir em app / controllers / my_devise e adicione
MyDevise
espaço para nome aos nomes de classe do controlador.Registrations
exemplo:Mude suas rotas de acordo:
Copie todas as visualizações necessárias
app/views/my_devise
da pasta Devise gem ou userails generate devise:views
, exclua as visualizações para as quais você não está substituindo e renomeie adevise
pastamy_devise
.Dessa forma, você terá tudo bem organizado em duas pastas.
fonte
create
método de substituição de Devise. Meu controlador criado por andaime que eu modifiquei funciona muito bem, mas como você faz isso funcionar com osresource
negócios da Devise ?MyDevise::RegistrationsController < Devise::RegistrationsController
cria um erro de dependência circular. Estou fazendo algo errado?Acredito que exista uma solução melhor do que reescrever o RegistrationsController. Fiz exatamente a mesma coisa (apenas tenho organização em vez de empresa).
Se você definir corretamente seu formulário aninhado, no nível de modelo e exibição, tudo funcionará como um encanto.
Meu modelo de usuário:
Meu modelo de organização:
Minha opinião: 'devise / registrations / new.html.erb'
fonte
resource
na exibição em vez de uma variável de instância de classe@resource
?Você pode gerar visualizações e controladores para personalizar a criação.
Usar
e
Ele copiará controladores e visualizações específicos do gem para o seu aplicativo.
Em seguida, diga ao roteador para usar este controlador:
fonte
Métodos muito simples Vá ao terminal e digite o seguinte
Avançar para usar visualizações personalizadas
agora no seu arquivo route.rb
Você pode adicionar outros controladores também. Isso fará com que o dispositivo use controladores na pasta de usuários e visualizações na pasta de usuários.
Agora você pode personalizar suas visualizações como desejar e adicionar sua lógica aos controladores na pasta controladores / usuários. Aproveitar !
fonte