Rails - 型号名称以S结尾

时间:2012-08-13 04:52:58

标签: ruby-on-rails scaffolding

我有一个名为ActiveDns的模型。我跑的时候

rails g scaffold_controller ActiveDns

我收到了消息

  

使用单一化版本检测到模型的多个版本。用--force-plural覆盖。

现在,生成控制器和视图假装单数为ActiveDn而复数为ActiveDns,我得到像link_to new_dn_path这样的愚蠢内容。 --force-plural参数似乎无法解决此问题:

rails g scaffold_controller ActiveDns --force-plural

仍然导致控制器使用名为@active_dn的变量和使用new_dn_path的视图,使用rails 3.2.3。我正在尝试使用rails d scaffold_controller ActiveDns删除文件。

这样做的正确方法是什么?

3 个答案:

答案 0 :(得分:16)

  

这样做的正确方法是什么?

我将inflections用于document无数实体。

  

配置/初始化/是inflections.rb

ActiveSupport::Inflector.inflections do |inflect|
  inflect.uncountable "ActiveDns"
end

然后你得到:

$ rails g scaffold_controller ActiveDns
      create  app/controllers/active_dns_controller.rb
      invoke  erb
      create    app/views/active_dns
      create    app/views/active_dns/index.html.erb
      create    app/views/active_dns/edit.html.erb
      create    app/views/active_dns/show.html.erb
      create    app/views/active_dns/new.html.erb
      create    app/views/active_dns/_form.html.erb
      invoke  test_unit
      create    test/functional/active_dns_controller_test.rb
      invoke  helper
      create    app/helpers/active_dns_helper.rb
      invoke    test_unit
      create      test/unit/helpers/active_dns_helper_test.rb

这是你想要的吗?

答案 1 :(得分:13)

我使用rails-3.2进行了测试(我猜它应该与rails-3.x配合使用)

打开config/initializers/inflections.rb并添加规则:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular 'dns', 'dnses'
end

生成控制器

rails g scaffold_controller ActiveDns

并将路线添加到config/routes.rb文件

resources :active_dnses

然后你应该看到:

$ rake routes

   active_dnses GET    /active_dnses(.:format)          active_dnses#index
                POST   /active_dnses(.:format)          active_dnses#create
 new_active_dns GET    /active_dnses/new(.:format)      active_dnses#new
edit_active_dns GET    /active_dnses/:id/edit(.:format) active_dnses#edit
     active_dns GET    /active_dnses/:id(.:format)      active_dnses#show
                PUT    /active_dnses/:id(.:format)      active_dnses#update
                DELETE /active_dnses/:id(.:format)      active_dnses#destroy

答案 2 :(得分:0)

  

我想分享我如何解决我的问题。

我在Pacman下有一个名称为Data_Warehouse的MVC。

Pacman是专有名词。 (不能是Pacmene,而应该是Pacmanss

Data_Warehouse就像一个平台名称。 (可以是任何一种,在这种情况下,其DataWarehouse::Pacman

所以,我有

模型名称-models/data_warehouse/pacman.rb

视图名称-views/data_warehouse/pacmans/index.slim

控制器名称-controller/data_warehouse/pacmans_controller.rb

问题是,Rails读取了此路径

data_warehouse_pacmans_path

data_warehouse_pacmen_path

由于多元化。

所以

我通过添加

解决了这个问题
ActiveSupport::Inflector.inflections do |inflect|
   inflect.uncountable %w( pacmans )
end

到Rails中的inflections.rb文件。

  

希望这会有所帮助