我一直在Rails 3和Mongoid上飙升,并且在Grails的自动脚手架的美好回忆中,当我发现时,我开始寻找红宝石的DRY视图: http://github.com/codez/dry_crud
我创建了一个简单的类
class Capture
include Mongoid::Document
field :species, :type => String
field :captured_by, :type => String
field :weight, :type => Integer
field :length, :type => Integer
def label
"#{name} #{title}"
end
def self.column_names
['species', 'captured_by', 'weight', 'length']
end
end
但是由于dry_crud依赖于self.column_names并且上面的类不继承自ActiveRecord :: Base,我必须为column_names创建我自己的实现,如上所述。我想知道是否可以创建一个返回上述所有字段的默认实现,而不是硬编码列表?
答案 0 :(得分:4)
为什么你会在内置方法时遇到麻烦呢?
对于Mongoid:
Model.attribute_names
# => ["_id", "created_at", "updated_at", "species", "captured_by", "weight", "length"]
答案 1 :(得分:3)
如果没有在Mongoid :: Document中注入新方法,可以在模型中执行此操作。
self.fields.collect { |field| field[0] }
更新:嗯,如果你喜欢冒险,那就更好了。
在模型文件夹中创建一个新文件并将其命名为model.rb
class Model
include Mongoid::Document
def self.column_names
self.fields.collect { |field| field[0] }
end
end
现在你的模型可以从该类继承而不是包含Mongoid :: Document。 capture.rb 将如下所示
class Capture < Model
field :species, :type => String
field :captured_by, :type => String
field :weight, :type => Integer
field :length, :type => Integer
def label
"#{name} #{title}"
end
end
现在你可以将它原生用于任何模型。
Capture.column_names