Rails应用程序通过链接获得不必要的RESTFUL

时间:2012-06-29 22:21:13

标签: ruby-on-rails

我有一个应用程序,当我在主页上时链接工作正常,但当我在属于“用户”等资源的页面上时,某些链接会有点奇怪。

当我在主页上点击“关于”页面的链接时,我直接在那里。但是,如果我在用户/索引的页面上,并将鼠标悬停在“关于”页面的链接上,则会将目标显示为“用户/关于”。

这是我的路线文件的样子。

RobotimusApp::Application.routes.draw do

  resources :users

  root to: "pages#home"

  match '/about', to:'pages#about'
  match '/guides', to:'pages#guides'

end

这是我的导航栏的样子

%ul.nav
  %li
    =link_to 'Home', root_url
  %li
    =link_to 'About', 'about'
  - if user_signed_in?
    %li
      = link_to('My Sites', user_path(current_user))

2 个答案:

答案 0 :(得分:2)

Welp,问题出在这一行:

=link_to 'About', 'about'

我们传入字符串about_path,而不是传入像'about'这样的路由路径。当link_to收到一个字符串作为其URL参数时,它不会通过路由器或任何东西运行它;它假定这是您想要访问的URL。 (毕竟,about_path等返回字符串。)

所以,你最终在HTML中得到这样的东西:

<a href="about">About</a>

此处,about是相对网址,因此从路径/users转到/users/about

可以只使用前面的斜杠使其成为绝对路径:

= link_to 'About', '/about'

但是当我们可以使用路由时,对我们的URL进行硬编码并不是特别的Rails-y。你可能会这样:

= link_to 'About', about_pages_path

(路由名称是about_pages吗?它可能应该是。您始终可以使用as参数命名。)

答案 1 :(得分:1)

如果您在终端中运行rake routes,您将获得所有可用路线的列表。

认为您的关于页面的链接应该是

  = link_to 'About', about_pages_path