Ruby on rails Rails 3.x如何正确定义屈折变化

Ruby on rails Rails 3.x如何正确定义屈折变化,ruby-on-rails,inflection,Ruby On Rails,Inflection,我需要为“机箱”一词定义一个词形变化,其中同一个词定义了单数和复数,我真的很难做到这一点。 我还以为我在初始化/屈折变化.rb的定义 ActiveSupport::Inflector.inflections do |inflect| # inflect.plural /^(ox)$/i, '\1en' # inflect.singular /^(ox)en/i, '\1' # inflect.irregular 'person', 'people' # inflect.unco

我需要为“机箱”一词定义一个词形变化,其中同一个词定义了单数和复数,我真的很难做到这一点。 我还以为我在初始化/屈折变化.rb的定义

 ActiveSupport::Inflector.inflections do |inflect|
#   inflect.plural /^(ox)$/i, '\1en'
#   inflect.singular /^(ox)en/i, '\1'
#   inflect.irregular 'person', 'people'
#   inflect.uncountable %w( fish sheep )
    inflect.uncountable(/.*chassis.*/i)
 end
注意到示例
influct.uncountable%w(fish Shemp)
我在第一次设置脚手架时尝试使用influct.uncountable%w(chassis),但效果并不理想,因为它没有考虑路径中的前导部分,并导致关系和其他表(如car\u chassis和chassis\u lookup)出现问题

在研究了作为堆栈溢出中类似问题的答案而提供的各种解决方案后,我最终提出了
拐点.不可数(/.*chassis.*/I)
,它似乎可以解决脚手架问题,但我遇到了路由问题,
为显示操作错误提供了无路由

ActionController::RoutingError - No route matches {:action=>"show", :controller=>"admin/chassis"}
这很有意义,因为我需要索引操作,所以我没有将对象传递给路径,但是Rails显然认为我在请求显示操作

正则表达式的其他示例

#   inflect.plural /^(ox)$/i, '\1en'
#   inflect.singular /^(ox)en/i, '\1'
对我来说,它们完全是胡说八道,学习正则表达式需要一辈子的时间来学习,我既没有兴趣也没有理智去改变我的想法,而且rails关于屈折变化的文档坦白说是相当可怜的


我显然没有正确的拐点。有谁能给我一个完整的解决方案,确切地说,我应该如何为我和其他人定义“机箱”一词的词形变化,因为我之前找到的答案都没有提供完整和正确的解决方案,你的词形变化似乎是正确的。 检查“耙路线”告诉您的内容。在我的例子中,它足够聪明,可以检测到多个和单个形式的机箱是相同的,因此它生成了admin_chassis_索引,而不仅仅是admin_chassis用于#index操作。也许,你也是如此。这就是我所做的:

在config/routes.rb中

namespace :admin do
  resources :chassis
end
运行“rake路由”会给出(注意第一条路径):

因此,对于#索引,我需要调用:

<%= link_to "Chassis", admin_chassis_index_url%>

太棒了。天知道我为什么不查“耙子路线”我已经为这件事焦头烂额好几天了
<%= link_to "Chassis", admin_chassis_index_url%>