Извините, что отвечаю на мой собственный вопрос, но в моем случае это был простой случай пропуска очевидного: модели CarrierWave требовалось строковое поле для указания пути. Итак, моя модель:
class SiteAsset < ActiveRecord::Base
mount_uploader :asset, AssetUploader
def store_dir
'public/assets'
end
def extension_white_list
%w(jpg jpeg gif png pdf doc docx xls xlsx)
end
end
и правильная миграция была:
class CreateSiteAssets < ActiveRecord::Migration
def self.up
create_table :site_assets do |t|
t.string :title
t.string :asset
t.timestamps
end
end
def self.down
drop_table :site_assets
end
end
Недостающая часть заклинания заключалась в том, что в моей миграции отсутствовала строка "актив". Я думаю, я просто не видел требования в документах, хотя здравый смысл сделал бы это сразу очевидным.