rails 路由在另一个控制器中无法正常工作

rails routing not working as expected when in another controller

我注意到我的 navigation/routing 在我使用不同的控制器时无法正常工作。

我的路线:

get 'help/version_history' => 'about_and_helps#version_history'

我就是这样 link 的:

<%= link_to "Version History", '/help/version_history' %>

如果我显示一个特定的投诉,然后尝试转到菜单 link 查看版本历史记录,我会收到错误消息。

The page you were looking for doesn't exist.
You may have mistyped the address or the page may have moved.

url是http://cctweb:9298/complaints/help/version_history

如果我在投诉索引页面上,单击 link 会将我带到 url 为 http://cctweb:9298/help/version_history

的正确页面

错误在于相对性(可能是由于您提供的示例中的前导斜杠)。

为了使这更简单,并遵循 Rails 的惯例,我建议为您的路线指定一个名称:

get 'help/version_history', to: 'about_and_helps#version_history', as: 'my_route_name'

注意 as 选项。这告诉路由器这个路由有一个名字,在我的例子中,它被设置为 my_route_name

现在您可以 link 使用以下内容:

<%= link_to "Version History", my_route_name_url %>

这将解决相对论问题,并始终link回到该特定路线。即使您以后更改路由的 URI,使用路由名称一切仍然有效。

可以在 Rails Routing Docs

中找到更多选项和示例