Quando os objetos do Active Record em relacionamentos has_many são salvos?

Estou usando o Rails 1.2.3 (sim, eu sei) e estou confuso sobre comohas_many trabalha em relação à persistência de objetos.

Por exemplo, vou usar isso como minha declaração:

class User < ActiveRecord::Base
    has_many :assignments
end

class Assignment < ActiveRecord::Base
    belongs_to :user
end

Pelo que entendi, isso gera, entre outros, um métodoUser#assignments.build, que cria umAssignment objeto cujouser_id é a instância de recebimentoid (e cujos outros campos são especificados no argumento), mas não salva esse objeto no banco de dados. O objeto pode ser salvo mais tarde chamandoAssignment#save!.

No entanto, os programadores pragmáticosDesenvolvimento Web ágil com Rails, segunda edição, que eu tenho usado como tutorial e referência, diz:

Se o objeto pai existir no banco de dados, adicionar um objeto filho a uma coleção salvará automaticamente esse filho.

Parece haver uma contradição aqui. O que eu gostaria de saber é:

Se eu fizersome_user.assignments.build, é oAssignment objeto salvo?Se eu fizersome_user.assignments << Assignment.new, é oAssignment objeto salvo?Se eu fizersome_user.assignments << Assignment.create, são feitas duas chamadas de banco de dados ou apenas uma? E se eu modificar oAssignment objeto entre criá-lo e adicioná-lo aosome_user.assignments?O que acontece se eusave! aAssignment objeto cujo correspondenteUser ainda não foi salvo no banco de dados?

P.S. A razão que eu não uso apenasUser#assignments.create para tudo, é porque ele não me permite extrair a inicialização para um método externo, que gostaria de poder fazer. Eu também não quero fazer várias viagens ao banco de dados.

questionAnswers(1)

yourAnswerToTheQuestion