Rails,RESTful路由和复数

时间:2009-07-09 19:48:17

标签: ruby-on-rails

我正在努力使用Rails 2.3.2中的RESTful路由生成的多元化。

具体来说,我有一个名为sitestatus的资源。这种资源真的是不可数的(鹿是鹿,而不是鹿)。当我在初始化器中将其指定为不可数时,我会得到一些助手,但sitestatuses_path不可用(这是有意义的)。

所以,为了表示整合,我允许sitestatus可数。所以现在,Rails将sitestatus复数为sitestatuses(并不太可怕),但它坚持将其单一化为sitestatu(错过了's',搞笑了并且可怕的同时)。

所以,我掏出了更大的锤子并将此代码添加到了初始化器中:

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

(注意:我尝试使用irregular并且它无法正常工作)

这样做可以在我"sitestatus".pluralize时在控制台中获得预期的结果,但是当我尝试在我的视图中调用sitestatuses_path时,我得到了

undefined local variable or method 'sitestatuses_path'

当我在控制台中加载ActionController :: UrlHelper并调用sitestatus_path(123)时,我得到sitestatus/123正如我所料。但是,当我致电sitestatuses_path时,我得到了

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

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

我错过了什么?

2 个答案:

答案 0 :(得分:2)

好的,事实证明我不需要使用变形器。对于sitestatus这个词,Rails已经做了正确的事。

我需要采用一些问题和一些解决方案。

问题1:我使用的是map.resources :sitestatus,而不是map.resources :sitestatuses。这个词末尾的“s”让Rails认为它已经是应该存在的多元化。因此,有趣的sitestatu_path助手。

解决方案:Pluralize:sitestatus to:sitestatuses。

这造成了两个问题:

问题A:Rails现在假设控制器被命名为“Sitestatuses”,而不是。 解决方案A:使用Rails路由器提供的:controller hash_hey重命名控制器。

问题B:Rails假设我想要生成的url路径应该是/sitestatuses,它不应该是:as。 解决方案B:使用{{1}} hash_key重命名生成的URL。

现在,一切都很完美。

答案 1 :(得分:1)

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