0
我有一个Rails 4.1.6应用程序,并使用Devise为'用户'模型。我在登录页面的链接工作正常:Rails链接更改另一个链接
<%= link_to 'Sign in'.upcase, new_user_session_path %>
结果
<a href="https://stackoverflow.com/users/sign_in">SIGN IN</a>
但是,添加一个链接到另一个控制器上的行动打破了链接sign_in:
<%= link_to('GET STARTED', {controller: :contacts, action: :new}, method: :get) %>
<%= link_to 'Sign in'.upcase, new_user_session_path %>
仍生成相同的HTML:
<a data-method="get" href="/contacts/new">GET STARTED</a>
<a href="https://stackoverflow.com/users/sign_in">SIGN IN</a>
但是,在“登录”链接不再起作用,与此错误:
ActionController::UrlGenerationError at /users/sign_in
No route matches {:action=>"new", :controller=>"devise/contacts"}
This answer是类似的情况,并告诉我说,“Rails正在寻找一个局部设计下作用域,因为这是下一个你正在渲染。“但是,我的范围理解很薄弱,我仍然在努力解决这个问题。
# relevant portion of routes.rb:
devise_for :users, :controllers => { registrations: 'registrations' }
resources :users
match '/contacts/new', to: 'contacts#new', via: 'get'
感谢。是的,使用contacts_new_path帮手解决了这个问题。任何想法为什么我的旧{控制器:...,行动:...}格式导致问题? 另外,感谢您对路线格式的建议,以及它如何影响我的路径帮手 – pgarber
我不确定。使用'{controller:...,action:...}'调用[url_for](http://api.rubyonrails.org/classes/ActionDispatch/Routing/UrlFor.html#method-i-url_for)。也许这加上一些命名空间逻辑正在影响用于你的URL的命名空间。不幸的是,我不够熟悉,无法说清楚。 –