Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

link_to(:controller=>"something") helper + Devise doesn't work properly

all! Maybe someone knows why this:

def index_link(object, content = t("#{object.to_s.pluralize}.index"))
  #link_to(content, {:controller=>object.to_s.pluralize}, :scope=>"") if can?(:read, p(object)) #this doesn't work too
  link_to(content, :controller=>"trademarks")
  #link_to(content, trademarks_path) #this do work, but I need to set path from object
end

makes an exception like this:

No route matches {:controller=>"devise/trademarks"}

stack:

actionpack (3.0.3) lib/action_dispatch/routing/route_set.rb:424:in `raise_routing_error'
actionpack (3.0.3) lib/action_dispatch/routing/route_set.rb:406:in `generate'
actionpack (3.0.3) lib/action_dispatch/routing/route_set.rb:453:in `generate'
actionpack (3.0.3) lib/action_dispatch/routing/route_set.rb:481:in `url_for'
actionpack (3.0.3) lib/action_dispatch/routing/url_for.rb:131:in `url_for'
actionpack (3.0.3) lib/action_view/helpers/url_helper.rb:99:in `url_for'
actionpack (3.0.3) lib/action_view/helpers/url_helper.rb:236:in `link_to'
app/helpers/application_helper.rb:53:in `index_link'
app/views/layouts/application.html.erb:20:in `_app_views_layouts_application_html_erb___741328535__615736668_0'
actionpack (3.0.3) lib/action_view/template.rb:135:in `send'
actionpack (3.0.3) lib/action_view/template.rb:135:in `render'

and how to make it work?

like image 702
Alexander Ulitin Avatar asked Feb 02 '23 22:02

Alexander Ulitin


2 Answers

You have to add a slash to the path. For example:

<li><%= link_to "Events" , :controller => "/events", :action => "index" %></li>

Source: https://github.com/plataformatec/devise/issues/471#issue/471/comment/395243

like image 118
nothing-special-here Avatar answered Feb 13 '23 17:02

nothing-special-here


here's the part of rake routes:

      new_user_session GET    /users/login(.:format)         {:controller=>"devise/sessions", :action=>"new"}
          user_session POST   /users/login(.:format)         {:controller=>"devise/sessions", :action=>"create"}
  destroy_user_session GET    /users/logout(.:format)        {:controller=>"devise/sessions", :action=>"destroy"}
         user_password POST   /users/password(.:format)      {:controller=>"devise/passwords", :action=>"create"}
     new_user_password GET    /users/password/new(.:format)  {:controller=>"devise/passwords", :action=>"new"}
    edit_user_password GET    /users/password/edit(.:format) {:controller=>"devise/passwords", :action=>"edit"}
                       PUT    /users/password(.:format)      {:controller=>"devise/passwords", :action=>"update"}
     user_registration POST   /users(.:format)               {:controller=>"devise/registrations", :action=>"create"}
 new_user_registration GET    /users/register(.:format)      {:controller=>"devise/registrations", :action=>"new"}
edit_user_registration GET    /users/edit(.:format)          {:controller=>"devise/registrations", :action=>"edit"}
                       PUT    /users(.:format)               {:controller=>"devise/registrations", :action=>"update"}
                       DELETE /users(.:format)               {:controller=>"devise/registrations", :action=>"destroy"}
                       GET    /content/:id-:alias(.:format)  {:controller=>"contents", :action=>"show", :id=>/\d+/}
              contents GET    /content(.:format)             {:controller=>"contents", :action=>"index"}
                       POST   /content(.:format)             {:controller=>"contents", :action=>"create"}
           new_content GET    /content/new(.:format)         {:controller=>"contents", :action=>"new"}
          edit_content GET    /content/:id/edit(.:format)    {:controller=>"contents", :action=>"edit"}
               content GET    /content/:id(.:format)         {:controller=>"contents", :action=>"show"}
                       PUT    /content/:id(.:format)         {:controller=>"contents", :action=>"update"}
                       DELETE /content/:id(.:format)         {:controller=>"contents", :action=>"destroy"}
            trademarks GET    /trademarks(.:format)          {:controller=>"trademarks", :action=>"index"}
                       POST   /trademarks(.:format)          {:controller=>"trademarks", :action=>"create"}
         new_trademark GET    /trademarks/new(.:format)      {:controller=>"trademarks", :action=>"new"}
        edit_trademark GET    /trademarks/:id/edit(.:format) {:controller=>"trademarks", :action=>"edit"}
             trademark GET    /trademarks/:id(.:format)      {:controller=>"trademarks", :action=>"show"}
                       PUT    /trademarks/:id(.:format)      {:controller=>"trademarks", :action=>"update"}
                       DELETE /trademarks/:id(.:format)      {:controller=>"trademarks", :action=>"destroy"}

the requested page is /users/edit. The bug happens only in devise controllers.

like image 37
Alexander Ulitin Avatar answered Feb 13 '23 15:02

Alexander Ulitin