我有一个Rails 4.1.6应用程序并使用Devise用于'用户'模型。我登录页面的链接运行正常:
<%= link_to 'Sign in'.upcase, new_user_session_path %>
结果
<a href="/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="/users/sign_in">SIGN IN</a>
但是,&#39;登录&#39;链接不再有效,出现此错误:
ActionController::UrlGenerationError at /users/sign_in
No route matches {:action=>"new", :controller=>"devise/contacts"}
This answer是针对类似情况的,并且告诉我&#39; Rails正在寻找Devise下的部分范围,因为这是您正在渲染的范围。&#39;但是,我的范围理解很弱,我仍然在努力解决这个问题。
# relevant portion of routes.rb:
devise_for :users, :controllers => { registrations: 'registrations' }
resources :users
match '/contacts/new', to: 'contacts#new', via: 'get'
答案 0 :(得分:0)
我不是100%确定为什么会发生这种情况,但我建议您从链接中删除method: :get
。我还建议使用contacts_new_path
帮助程序,而不是使用{ controller: ..., action: ... }
。最后,您可以使用更标准的resource :contacts, only: :new
定义路线(这会将方法更改为new_contact_path
)。
所以,routes.rb
resource :contacts, only: :new
在your_template.html.erb
中<%= link_to 'GET STARTED', new_contact_path %>
<%= link_to 'Sign in'.upcase, new_user_session_path %>