Я согласен с другими ответчиками, предлагающими сделать это в коде. Но это не должно быть настолько многословно, как предложено. Это уже один лайнер, если вы хотите, чтобы это было:
@new_user.checklist_items.create! :name => 'Wash and wax the Ford F650.'
Добавьте в цикл элементы, которые вы читаете из файла, или храните в своем классе, или где-либо:
class ChecklistItem < AR::Base
DEFAULTS = ['do one thing', 'do another']
...
end
class User < AR::Base
after_create :create_default_checklist_items
protected
def create_default_checklist_items
ChecklistItem::DEFAULTS.each do |x|
@new_user.checklist_items.create! :name => x
end
end
end
или если ваши элементы усложняются, замените массив строк на массив хэшей ...
# ChecklistItem...
DEFAULTS = [
{ :name => 'do one thing', :other_thing => 'asdf' },
{ :name => 'do another', :other_thing => 'jkl' },
]
# User.rb in after_create hook:
ChecklistItem::DEFAULTS.each do |x|
@new_user.checklist_items.create! x
end
Но я на самом деле не предлагаю вам выставлять все значения по умолчанию в константе внутри ChecklistItem
. Я просто описал это таким образом, чтобы вы могли видеть структуру объекта Ruby. Вместо этого бросьте их в YAML-файл, который вы прочитали один раз, и поместите в кеш:
class ChecklistItem < AR::Base
def self.defaults
@@defaults ||= YAML.read ...
end
end
Или, если вы хотите, чтобы администраторы могли управлять параметрами по умолчанию на лету, поместите их в базу данных:
class ChecklistItem < AR::Base
named_scope :defaults, :conditions => { :is_default => true }
end
# User.rb in after_create hook:
ChecklistItem.defaults.each do |x|
@new_user.checklist_items.create! :name => x.name
end
Много опций.