我正在努力使用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...
此名称是模型和控制器的名称,它实际上是两者的唯一逻辑名称,因为它与对象的业务名称完美对齐。
我错过了什么?
答案 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。