Why does Rails only save the joiner record in one instance but not another?

Assuming we have User, Account, and Role models, and a User has_many
:accounts, through: :roles and vice-versa, with the following snippet
Rails
automatically creates the Role (joiner) record, but with the snippet
after
Rails will not. I think I’m misunderstanding how has_many through works,
so
I would appreciate any insight into the subject.

def new
@account = Account.new(params[:account])
@user = @account.users.build
end
def new
@account = Account.new(params[:account])
@account.save
end

Using this snippet Rails does not save the Role record: (If you
replace
current_user.accounts.build with current_user.accounts.create Rails will
save the Role record)

def new
@account = current_user.accounts.build
end
def create
@account = current_user.accounts.build(params[:account])
@account.save
end

Models:

class User < ActiveRecord::Base
has_many :roles
has_many :accounts, through: :roles
end
class Account < ActiveRecord::Base
has_many :roles
has_many :users, through: :roles
accepts_nested_attributes_for :users
end
class Role < ActiveRecord::Base
belongs_to :users
belongs_to :accounts
end