tutorial rails not español ejemplos could ruby-on-rails ruby devise

ruby on rails - rails - El enlace de confirmación de diseño me da error de enrutamiento



rspec rails devise (4)

Estoy terminando una simple aplicación. Estoy usando la gema Devise como proveedor de inicio de sesión y registro.

Mi problema: cuando el usuario hace clic en su enlace de confirmación de correo electrónico, recibo el error de enrutamiento:

No route matches {:action=>"update_account", :controller=>"devise/users", :locale=>:ru}

Mi enlace de confirmación se ve así:

www.mysite.com/users/confirmation?confirmation_token=dRRtTzVTy8gSF_D8FehF

En el diseño de la aplicación, tengo un formulario de actualización del usuario, donde el usuario puede editar sus detalles.

<%= form_for(@user, :url => { :action => "update_account",:controller =>"users" }, html: { "data-parsley-validate" => true, :id=>"user-edit-profile"},remote: true) do |f| %> ... <%end%>

Mis rutas:

scope "(:locale)", :locale => /lv|ee|ru/ do devise_for :users, :controllers => {:registrations=> "registrations"} resource :user do collection do post ''update_account'' end end end

UsersCotroller:

class UsersController < ApplicationController before_action :set_user, only: [:show, :upvote, :downvote] before_action :authenticate_user! respond_to :html, :js def index @users = User.all end def show respond_with(@user) end def update_account @user = User.find(current_user.id) @user.attributes = user_params respond_to do |format| if @user.save(validate: false) # sign_in :user, @user, bypass: true format.html format.json else format.html { render action: ''edit'' } format.json { render json: @user.errors.full_messages, status: :unprocessable_entity } end end end def new @user = User.new respond_with(@user) end def edit @user = current_user end def create @user = User.new(user_params) flash[:notice] = ''User was successfully created.'' if @user.save respond_with(@user) end def update flash[:notice] = ''User was successfully updated.'' if @user.update(user_params) respond_with(@user) end def destroy @user.destroy respond_with(@user) end def upvote @user.liked_by current_user flash[:notice] = ''Upvote added.'' if @user.vote_registered? redirect_to @user end def downvote @user.downvote_from current_user flash[:notice] = ''Downvote added.'' if @user.vote_registered? redirect_to @user end private def set_user @user = User.find(params[:id]) end def user_params # NOTE: Using `strong_parameters` gem params.required(:user).permit(:password, :password_confirmation, :current_password,:name,:role, :email,:bypass_humanizer, :not_a_robot) end end

Rutas:

new_user_session GET (/:locale)/users/sign_in(.:format) devise/sessions#new {:locale=>/lv|ee|ru/} user_session POST (/:locale)/users/sign_in(.:format) devise/sessions#create {:locale=>/lv|ee|ru/} destroy_user_session DELETE (/:locale)/users/sign_out(.:format) devise/sessions#destroy {:locale=>/lv|ee|ru/} user_password POST (/:locale)/users/password(.:format) devise/passwords#create {:locale=>/lv|ee|ru/} new_user_password GET (/:locale)/users/password/new(.:format) devise/passwords#new {:locale=>/lv|ee|ru/} edit_user_password GET (/:locale)/users/password/edit(.:format) devise/passwords#edit {:locale=>/lv|ee|ru/} PATCH (/:locale)/users/password(.:format) devise/passwords#update {:locale=>/lv|ee|ru/} PUT (/:locale)/users/password(.:format) devise/passwords#update {:locale=>/lv|ee|ru/} cancel_user_registration GET (/:locale)/users/cancel(.:format) registrations#cancel {:locale=>/lv|ee|ru/} user_registration POST (/:locale)/users(.:format) registrations#create {:locale=>/lv|ee|ru/} new_user_registration GET (/:locale)/users/sign_up(.:format) registrations#new {:locale=>/lv|ee|ru/} edit_user_registration GET (/:locale)/users/edit(.:format) registrations#edit {:locale=>/lv|ee|ru/} PATCH (/:locale)/users(.:format) registrations#update {:locale=>/lv|ee|ru/} PUT (/:locale)/users(.:format) registrations#update {:locale=>/lv|ee|ru/} DELETE (/:locale)/users(.:format) registrations#destroy {:locale=>/lv|ee|ru/} user_confirmation POST (/:locale)/users/confirmation(.:format) devise/confirmations#create {:locale=>/lv|ee|ru/} new_user_confirmation GET (/:locale)/users/confirmation/new(.:format) devise/confirmations#new {:locale=>/lv|ee|ru/} GET (/:locale)/users/confirmation(.:format) devise/confirmations#show {:locale=>/lv|ee|ru/} update_account_user POST (/:locale)/user/update_account(.:format) users#update_account {:locale=>/lv|ee|ru/} user POST (/:locale)/user(.:format) users#create {:locale=>/lv|ee|ru/} new_user GET (/:locale)/user/new(.:format) users#new {:locale=>/lv|ee|ru/} edit_user GET (/:locale)/user/edit(.:format) users#edit {:locale=>/lv|ee|ru/} GET (/:locale)/user(.:format) users#show {:locale=>/lv|ee|ru/} PATCH (/:locale)/user(.:format) users#update {:locale=>/lv|ee|ru/} PUT (/:locale)/user(.:format) users#update {:locale=>/lv|ee|ru/} DELETE (/:locale)/user(.:format) users#destroy {:locale=>/lv|ee|ru/} help GET (/:locale)/help(.:format) help#index {:locale=>/lv|ee|ru/} rules GET (/:locale)/rules(.:format) rules#index {:locale=>/lv|ee|ru/}

Intenté reiniciar el servidor pero sin éxito.

No pude encontrar ninguna pregunta similar, así que estoy creando una nueva.

Gracias por adelantado.


Su aplicación está buscando acción update_account en :controller=>"devise/users" porque en las rutas que tiene propeply tiene devise_for :users y al mismo tiempo ha definido el users controller que hereda de ApplicationController todos los controladores de dispositivo heredan de Devise::ControllerName entonces para resolver eso

  • intente cambiar el nombre del controlador para los users o
  • intenta definir esta función bajo el users controller que hereda de Devise

Parece que no lo app/models/user.rb :confirmable módulo de app/models/user.rb :confirmable en tu app/models/user.rb Agrega esto :confirmable . Puedes seguir este enlace oficial .


Use una solución simple como se indica a continuación:

<%= form_for(@user, :url => "/user/update_account", html: { "data-parsley-validate" => true, :id=>"user-edit-profile"},remote: true) do |f| %> ..... <%end%>


Cambiar '' recurso: usuario do '' a '' recurso: los usuarios lo hacen ''

Rutas:

scope "(:locale)", :locale => /lv|ee|ru/ do devise_for :users, :controllers => {:registrations=> "registrations"} resource :users do collection do post ''update_account'' end end end