我正在学习Ruby on Rails,我对link_to
函数有一个愚蠢的问题。
我设置了一个名为“home”的控制器,我创建了“index”作为动作。
我已经设定了设计。但是,当我浏览一些链接,例如sign_in
,sign_up
等时,我收到此错误:
Routing Error
No route matches {:controller=>"devise/home"}
我把它缩小到:
<%= link_to "Home", { :controller => "home", :action => "index" }, :class => "navlink" %>
这适用于我在家中的行为,但不适用于我的设计行动。
我在这里缺少什么?
答案 0 :(得分:3)
Devise为您创建一组生成正确路径的辅助函数。从命令行运行rake routes
以查看它们。您将获得类似于以下内容的输出(假设您的Devise模型名为User
)。
new_user_session GET /users/sign_in(.:format) {:controller=>"devise/sessions", :action=>"new"}
user_session POST /users/sign_in(.:format) {:controller=>"devise/sessions", :action=>"create"}
destroy_user_session GET /users/sign_out(.: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"}
user_password PUT /users/password(.:format) {:controller=>"devise/passwords", :action=>"update"}
user_registration POST /users(.:format) {:controller=>"devise/registrations", :action=>"create"}
new_user_registration GET /users/sign_up(.:format) {:controller=>"devise/registrations", :action=>"new"}
edit_user_registration GET /users/edit(.:format) {:controller=>"devise/registrations", :action=>"edit"}
user_registration PUT /users(.:format) {:controller=>"devise/registrations", :action=>"update"}
user_registration DELETE /users(.:format) {:controller=>"devise/registrations", :action=>"destroy"}
将_path
附加到每行的第一部分,为您提供需要调用的辅助函数的名称。
例如,以下内容将为您提供登录页面的链接:
<%= link_to "Login", new_user_session_path %>
请注意,如果请求是DELETE
而不是GET
(例如退出链接),则需要在link_to
调用中指定此请求。
<%= link_to "Logout", destroy_user_session_path, :method => :delete %>