Rails 3.x如何正确定义变形

时间:2013-02-27 06:39:51

标签: ruby-on-rails inflection

我需要为'chassis'这个词定义一个变形,其中同一个词定义了单数和复数,我真的很挣扎。 我以为我在那里有initialize / inflections.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

注意示例inflect.uncountable %w( fish sheep )当我第一次设置脚手架时,我尝试使用inflect.uncountable%w(机箱),但由于没有考虑到领先路径中的部分并导致关系和其他表(例如car_chassis和chassis_lookup)出现问题。

看过各种解决方案,作为Stack Overflow中类似问题的答案,我最终想出了inflect.uncountable(/.*chassis.*/i)这似乎照顾了脚手架,但我遇到<%= link_to "Chassis", admin_chassis_url%>给出的路线问题我没有显示行动错误的路线。

ActionController::RoutingError - No route matches {:action=>"show", :controller=>"admin/chassis"}

这是有意义的,因为我想要索引操作所以我没有将对象传递给路径,但Rails显然认为我在请求show动作

正则表达式的其他示例

#   inflect.plural /^(ox)$/i, '\1en'
#   inflect.singular /^(ox)en/i, '\1'

对我来说只是完全的gobbledygook并且学习正则表达式需要一辈子的学习,我没有倾向或理智来让我的头脑和轨道文件http://api.rubyonrails.org/classes/ActiveSupport/Inflector/Inflections.html在变形上是非常可怜的。

我显然没有得到正确的拐点。任何人都可以给我一个完整的解决方案,确切地说我应该如何为我和其他人定义“底盘”一词的变形,因为我发现之前的答案都没有提供完整和正确的解决方案

1 个答案:

答案 0 :(得分:1)

你的变形似乎是正确的。 检查'rake routes'告诉你什么。在我的情况下,智能足以检测到复数和单一形式的机箱是相同的,因此它为#index操作生成了admin_chassis_index而不仅仅是admin_chassis。也许,对你来说也是如此。这就是我所做的:

在config / routes.rb

namespace :admin do
  resources :chassis
end

运行'rake routes'给出(注意第一条路径):

admin_chassis_index GET    /admin/chassis(.:format)          admin/chassis#index
                    POST   /admin/chassis(.:format)          admin/chassis#create
  new_admin_chassis GET    /admin/chassis/new(.:format)      admin/chassis#new
 edit_admin_chassis GET    /admin/chassis/:id/edit(.:format) admin/chassis#edit
      admin_chassis GET    /admin/chassis/:id(.:format)      admin/chassis#show
                    PUT    /admin/chassis/:id(.:format)      admin/chassis#update
                    DELETE /admin/chassis/:id(.:format)      admin/chassis#destroy

所以,对于#index,我需要打电话:

<%= link_to "Chassis", admin_chassis_index_url%>