All for Joomla All for Webmasters
Ruby On Rails

Ruby on Rails: campos customizados na edição de usuário do Devise

Image result for ruby on rails

A gem do Devise auxilia na autenticação de usuários para aplicações Ruby on Rails e é comumente a opção da maior parte dos desenvolvedores. Sua instalação e configuração é trivial e intuitiva, entretanto algumas excessões de caso de uso requerem um conhecimento mais profundo do funcionamento da gem. Em um exemplo desses casos, suponha que você quer adicionar um atributo customizado ao model User para armazenar o idioma de preferência do usuário e reaproveitar a estrutura de views, rotas e métodos já implementados. Nesse caso, é necessário sobrescrever a view e os parâmetros permitidos pelo strong params.

Sobrescrevendo os parâmetros do update

O Devise usa o helper  devise_parameter_sanitizer  para sanitizar os parâmetros. Para passar parâmetros personalisados, você pode adicionar ao ApplicationController um callback para configurar os parâmetros permitidos. No exemplo utilizado, ficaria da seguinte forma:

O método permit recebe 2 parâmetros:

  • O primeiro parâmetro define a ação em questão. Como o usuário definir seu idioma é uma ação de atualização da conta, utilizamos :account_update . Se fosse o caso de uso fosse no ato de registro, utilizaríamos :sign_up .
  • O segundo parâmetro define a lista de atributos extras permitidos para a ação.

Sobrescrevendo a view de edição

Para incluir o atributo customizado no formulário de edição da conta, é necessário sobrescrever a view do devise. Para gerá-las na sua pasta app  para edição, execute o comando abaixo:

A partir dessa geração, você poderá localizar o arquivo que vamos editar em app/views/devise/registrations/edit.html.erb . Vamos adicionar um select com as opções de idioma pro usuário, ficando dessa forma:

Isso deve ser suficiente para permitir que o usuário atualize sua preferência de idioma. O helper que fornece o link para essa view é o edit_user_registration_path . Para as versões mais recentes do Rails/Devise, isso deve ser suficiente para obter o resultado esperado. Em caso de dúvidas ou caso queira obter as descrições completas, a documentação do Devise é uma boa referência.

Se liga aí, porque é a hora da revisão

Para permitir a edição da conta de usuário com atributos customizados, são necessárias basicamente duas ações: a sobrescrita dos parâmetros permitidos e a sobrescrita do formulário de edição para incluir o(s) novo(s) atributo(s). O Devise sugere essa sobrescrita no ApplicationController , mas outra opção seria gerar o Devise::RegistrationsController  e sobrescrever o método devise_parameter_sanitizer para obter o mesmo resultado. Quaisquer dúvidas ou sugestões, utilize a área de comentários ou entre em contato!

Você Também Pode Gostar

2 Comentários

  • Responder
    Sannytet
    12 de dezembro de 2018 at 02:50

    Nice posts! 🙂
    ___
    Sanny

  • Responder
    Diego
    7 de dezembro de 2019 at 10:51

    Me ajudou bastante. Simples e objetivo, parabéns!
    Valeu, mano!

  • Deixe uma resposta para Sannytet Cancelar Resposta