雖然Pravin確實指向了正確的方向,但我發現實現它並不簡單。我做了以下,我在config/initializers
添加的文件(名稱是不相關的),包含以下內容:
require 'active_support'
require 'active_record'
class YourApplication
module SchemaDefinitions
module ExtraMethod
def attachment(*args)
options = args.extract_options!
args.each do |col|
column("#{col}_identifier", :string, options)
column("#{col}_extension", :string, options)
column("#{col}_size", :integer, options)
end
end
end
def self.load!
::ActiveRecord::ConnectionAdapters::TableDefinition.class_eval { include YourApplication::SchemaDefinitions::ExtraMethod }
end
end
end
ActiveSupport.on_load :active_record do
YourApplication::SchemaDefinitions.load!
end
那麼你可以這樣做:
rails g model Person name:string title:string avatar:attachment
這將創建下列遷移:
def self.up
create_table :people do |t|
t.string :name
t.string :title
t.attachment :avatar
t.timestamps
end
end
如果再進行遷移,rake db:migrate
,將創建下列Person
型號:
ruby-1.9.2-p0 > Person
=> Person(id: integer, name: string, title: string, avatar_identifier: string, avatar_extension: string, avatar_size: integer, created_at: datetime, updated_at: datetime)
希望這有助於!
這是一個很好的替代方法,但它只適用於使用生成器。 – nathanvda 2011-03-15 21:29:59
以及quiestion是「是否有可能有這樣的事情:rails g模型用戶名:字符串頭像:附加」。所以我想這是適用的,但我明白你的觀點。 – Valdis 2011-03-15 21:35:34