在ruby中命名File类的通用约定

时间:2014-12-27 07:09:06

标签: ruby-on-rails ruby naming-conventions

在ruby中,看到名为klass的变量保存类名的名称是很常见的。由于class是保留关键字,因此拼写错误的单词klass可用于此目的。

我正在为类我需要为文件对象定义一个类似的解决方案。

显然

class File
end

对我不起作用,因为它会开始猴子修补我不想要的ruby的File类。

在实践中是否有一个常用于File课程的名称?我偶然发现使用Fyle的想法,但不确定这是否是一个好主意,并想与社区核实:)

编辑1 我的使用示例。

在我的rails应用程序中,我有一个包含许多文件的Product模型。还有其他模型也有文件关联。

所以我想宣布像我这样的协会

class Product
  has_many :files, as: :file_attachable
end

class File # I cannot use `File` because it conflicts with ruby's `File`
  belongs_to :file_attachable, polymorphic: true
end

1 个答案:

答案 0 :(得分:2)

使用模块命名空间。这使您的File类与Ruby的标准File类分开。

例如:

 module Foo
   class File
   end
 end

用法:

 f = Foo::File.new

对于Rails ActiveRecord,您可以这样做:

 module Foo
   class File < ActiveRecord::Base
   end
 end

Rails将根据继承自Base的类自动使用表名,并根据模块名称自动使用 not

Foo::File.table_name #=> "files"

如果您愿意自定义,可以提供自己的table_name

 module Foo
   class File < ActiveRecord::Base
     self.table_name = "foo_files"
   end
 end

协会的工作方式相同:

module Foo
  class User
    has_many :files  # class is Foo::File
  end
end

如果您愿意自定义,可以提供自己的class_name

module Foo
  class User
     has_many :files, class_name: "Foo::File"
  end
end