【问题标题】:Rails routing sometimes replaces the id in url with id-name. How do I avoid problems?Rails 路由有时会用 id-name 替换 url 中的 id。如何避免问题?
【发布时间】:2016-05-02 13:41:09
【问题描述】:

我的报告页面中的 url 通常如下所示:

 http://test-account.peter:3000/offices/7/reports/index

但是,有时它看起来像这样:

 http://test-account.peter:3000/offices/7-peters-office/reports/index

为什么会这样?

在我们将控制器操作从 GET 更改为 POST 并重命名之前,这并不是真正的问题。我们必须这样做,以便我们可以将更多参数打包到 ajax 请求中。用户仍然将网站的这一部分添加为书签,并且整天都会抛出错误。

我已尝试重定向路线:

   get '/offices/*all/reports/index' => 'offices#show'
   get '/offices/:office_id/reports/index' => 'offices#show'
   get '/offices/:office_name/reports/index' => 'offices#show'

有没有办法抓住名字?还是我必须首先阻止将名称添加到 URL 中?

【问题讨论】:

    标签: ruby-on-rails ruby routes


    【解决方案1】:

    在控制器中,您将能够解析参数以仅获取第一个字符并检查其是否为整数。但是,调试参数如何分配给不同的值并确保仅使用 id 会更好。如果您在视图中链接到该路由,请检查链接中传递的内容并确认该值是您期望的值。

    【讨论】:

      【解决方案2】:

      Rails 会进行路由,它不会在您的数据库中查找匹配的数据。因此,无需查看数据,您的三个路线完全相同,变量 (office_id & office_name) 只是命名不同。如果您收到关于示例 /offices/:office_name/reports/index 的请求,rails 将只匹配第一个,因为两条路由都匹配请求。

      您需要在路径中显示名称或 ID 的内容。如果您真的永远不会在相同的搜索中获得名称和 id,那么您可以只使用一个路由并尝试匹配控制器中数据库中的 id 或名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-22
        • 2015-11-30
        • 2011-03-15
        • 2015-03-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多