I need a ‘Contact’ link for both authenticated and unauthenticated users that will send them to
new_user_widget_path(current_user)
This doesn’t work for unauthenticated users of course because there is no current user. The method I’ve been using to solve this problem is to have two routes:
resources :widgets, only: :new
resources :users do
resources :widgets
end
The only purpose of the first route is to provide redirection in the unauthenticated case, and then redirect that user to the new widget page once he signs in.
class WidgetsController < ApplicationController
before_filter :authenticate_user!
def new
redirect_to new_user_widget_path(current_user)
end
end
This works perfectly well, but I’m curious, has anyone come across a more elegant solution to this problem?
User is not signed in and but you want proper redirection. In the view you can do this:
And then add this to application_controller.rb
which replaces the underscore with correct ID.
This is implemented on top of Devise’s
stored_location_formethod but it can easily be adapted to other authentication setups.