代码之家  ›  专栏  ›  技术社区  ›  salt.racer

Rails、RESTful路由和多元化

  •  2
  • salt.racer  · 技术社区  · 16 年前

    我正在努力解决Rails 2.3.2中RESTful路由生成的多元化问题。

    具体来说,我有一个资源叫做 sitestatus . 这种资源真的是数不清的(鹿是鹿,不是鹿)。当我在初始化器中将它指定为不可数时,我会得到一些帮助程序,但是 sitestatuses_path

    因此,作为一种顺从的姿态,我允许 可数的。现在,Rails实现了多元化 站点状态 sitestatuses (不太可怕),但它坚持 而且 将其奇异化为 sitestatu

    因此,我拿出我的大锤子,将以下代码添加到初始化器中:

    ActiveSupport::Inflector.inflections do |inflect|
      inflect.plural "sitestatus", "sitestatuses"
      inflect.singular "sitestatus", "sitestatus"
    end
    

    (注意:我试过使用 irregular 而且它没有正常工作)

    "sitestatus".pluralize ,但当我试图打电话给 站点状态\u路径 在我看来,我得到了

    undefined local variable or method 'sitestatuses_path'
    

    当我在控制台中加载ActionController::UrlHelper并调用 sitestatus_path(123) 我明白了 sitestatus/123 正如我所料。然而,当我打电话时 我明白了

    undefined method 'sitestatuses_path' for #<Object...
    

    这个名称是模型和控制器的名称,它实际上是两者的唯一逻辑名称,因为它与对象的业务名称完全一致。

    我错过了什么?

    2 回复  |  直到 15 年前
        1
  •  3
  •   salt.racer    16 年前

    好吧,事实证明我不需要使用拐点。Rails在这个词上已经做了正确的事情 sitestatus .

    map.resources :sitestatus map.resources :sitestatuses sitestatu_path 帮手。

    解决方案:将:sitestatus多元化为:sitestatus。

    问题A:Rails现在假定控制器名为“Sitestatuses”,而实际上并非如此。 :controller hash_hey由Rails路由器提供,用于重命名控制器。

    /sitestatuses ,这是不应该的。 解决方案B:使用 :as

    现在,一切都很完美。

        2
  •  1
  •   Duncan Beevers    16 年前

    您可以通过调用找到路由的命名路由方法名称以及用于访问它们的URL rake routes .