Estou trabalhando com Rails 5
Eu adicionei um novo nome de usuário de campo no modelo de usuário.
class Users::RegistrationsController < Devise::RegistrationsController
before_action :configure_permitted_parameters
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up).push(:username)
end
end
Durante o registro é exibido o erro: método indefinido `for 'para # Você quis dizer? garfo
Vestígio:
NoMethodError (método undefined `for 'para # Você quis dizer? Fork):
app/controllers/users/registrations_controller.rb:7:in `configure_permitted_parameters'
Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout
Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb
Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (5.0ms)
Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb
Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (2.9ms)
Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.2ms)
Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (118.1ms)
Quem pode ajudar? Como resolver esse problema?
ruby-on-rails
devise
ruby-on-rails-5
Dmitriy
fonte
fonte
Respostas:
According to the documentation:
fonte
gem 'devise', '~> 3'
ordenou-o para mim.Se você apenas alterar o
.for
para,.permit
ele também funcionará. Por exemplo:Funciona tanto no Rails 4.2.x quanto no Rails 5.0.x
fonte
Não esqueça
devise_parameter_sanitizer.permit(:account_update, keys: [:username])
fonte
Eu acho que você perdeu account_update no método configure_permitted_parameters do seu controlador, você precisa seguir o padrão de desenvolvimento. Devise tem uma página de atualização de conta. Você pode encontrar isso em views / devise / registrations / edit.html.erb, e seu código também não funcionará na página de inscrição, aqui você especificou a página de inscrição
Para atualizar sua tabela de usuário, no minuto em que você envia uma atualização em seus usuários / edição, ou se estiver enviando um nome de usuário na página de inscrição, você precisa seguir este padrão de planejamento para atualizar a tabela de usuário do banco de dados. Mesmo se você adicionou uma nova coluna à tabela do usuário, você teria que adicioná-la ao método configure_permitted_parameters. No seu caso, é nome de usuário, mas você perdeu account_update também. Você está basicamente dizendo que deseja atualizar o nome de usuário ou adicionar a string ao campo de nome de usuário sem seguir o padrão Devise. Qualquer campo que você adicionar à tabela User deve seguir este padrão do Devise. Além disso, você pode especificar qual página tem permissão para atualizar este nome de usuário. No meu exemplo abaixo, estou usando a página de atualização do devise. Então, como eu disse, mesmo se você adicionar um nome de campo personalizado à tabela Usuários, você precisa seguir esse padrão.
Em seguida, certifique-se em seu user.rb de validar o nome de usuário em seu modelo de usuário.
fonte
fonte