I hit on a solution (probably well known by others) that needs repeating so it can be found by Google next time
if((@title.roles.length > 0) && !@title.roles.include?( @title.role ))
@title.update_attributes(:role_id => @title.roles.first.id)
I put this block after the @title.update_attributes(params[:title]) call, and spent most of the afternoon chasing my tail to figure out why it never was working. A puts @title.roles.inspect showed that the list of roles apparently hadn't been changed by the call to update_attributes, even though the following page load (to the view method) showed the correct data had been persisted.
This morning, I added the line
before the block, and all started working perfectly. So word to the wise, reload before you start asking questions!