如何在Rails中禁用生成模型的复数形式?

3

有一个配置文件config/initializers/inflections.rb,可以根据这个问题的建议修改特定项目的复数形式:

ruby on rails pluralization help?

然而我对此不感兴趣。我想关闭生成模型名称的自动修改功能。

以下是示例:

rails generate scaffold UserData data1:string data2:string

数据被更改为“Datum”:

%] cat app/models/user_datum.rb 
class UserDatum < ActiveRecord::Base
  attr_accessible :data1, :data2
end

这是不良行为。

我该如何关闭它?

具体来说,如果您可以,请提供指南;我看到了一些帖子,人们说类似于“你必须修改配方”,但并没有实际的指南告诉我们如何做到这一点。

(我知道有些人会想开始回答:“你应该坚持rails的方式来做事情,因为长期来看会有好处;请不要这样做)


要明确的是,“data”被单数化为“datum”以生成模型名称。 - Gareth
问题在于值已经被更改。问题已更新以反映此更改。 - Doug
2个回答

5

首先,UserDatum 是单数形式。

无论如何:

更改你的 config/initializers/inflections.rb 文件:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.uncountable %w(UserData)
end

(使用您惯用的命名约定,例如,如果您使用下划线,则使用“user_data”,或者两者都使用。)
如果您想删除所有复数形式(不太可靠:这将影响世界上的所有内容):
ActiveSupport::Inflector.inflections do |inflect|
  inflect.clear
  inflect.singular(/$/i, '')
end

如果您只想控制模型/模型文件的命名,可以修改“ModelGenerator”补丁:
module Rails
  module Generators
    class ModelGenerator
      def plural_name; singular_name; end
      def plural_file_name; file_name; end
    end
  end
end

这并非在所有情况下都适用。例如,“VAsset”仍会生成“v_assets_controller.rb”->“class VAssetsController < ApplicationController” 。我真的想要一种完全关闭此行为的方法,而不是逐位异常(尽管如果没有其他选择,我会采取逐位例外;只要它们起作用就可以……)。 - Doug
@Doug 除了你指定的情况,它在任何情况下都不起作用;我认为这是显而易见的。 - Dave Newton
不,试一下。如果你把一个异常放在inflect.uncountable %w(VAsset)中,它对VAsset是不起作用的。 - Doug

0

最好的方法是:

rails generate scaffold HouseData --force-plural

(它仍然是逐项修复,但不会干扰复数形式的内容,这是全局性的,并且也会影响应用程序的其他部分)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接