在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
答案 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