2

我需要为“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( chassis ) 的示例,但这根本不起作用,因为它没有考虑路径中的前导部分并导致关系问题以及 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 显然认为我正在请求显示操作

正则表达式的其他示例

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

对我来说只是完整的gobbledygook,学习正则表达式需要一生的学习,我既没有兴趣也没有头脑清醒,并且rails文档http://api.rubyonrails.org/classes/ActiveSupport/Inflector/Inflections .html上的屈折变化坦率地说是非常可悲的。

我显然没有正确的拐点。谁能给我一个完整的解决方案,说明我应该如何为我和其他人定义“机箱”一词的变形,因为我发现以前的答案都没有提供完整和正确的解决方案

4

1 回答 1

1

你的变化似乎是正确的。检查'rake routes'告诉你什么。在我的例子中,它足够聪明地检测到底盘的复数和单一形式是相同的,因此它生成了 admin_chassis_index 而不仅仅是 admin_chassis 用于#index 操作。可能对你来说也是如此。这就是我所做的:

在 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%>
于 2013-02-27T23:07:14.200 回答