0

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

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

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

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))
4

2 回答 2

2

Welp,问题出在这一行:

=link_to 'About', 'about'

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

因此,您最终会在 HTML 中得到类似这样的内容:

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

这里,about是一个相对 URL,所以从路径/users/users/about.

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

= link_to 'About', '/about'

但是当我们可以使用路由来代替时,硬编码我们的 URL 并不是特别适合 Rails。你可能会这样做:

= link_to 'About', about_pages_path

(是about_pages路由名称吗?可能应该是。你总是可以用as参数命名它。)

于 2012-06-29T22:50:38.267 回答
1

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

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

  = link_to 'About', about_pages_path
于 2012-06-29T22:48:52.940 回答