Here's the model file:
class ProfileTag < ActiveRecord::Base     
  def self.create_or_update(options = {})
    id = options.delete(:id)
    record = find_by_id(id) || new
    record.id = id
    record.attributes = options
    puts "record.profile_id is"
    puts record.profile_id
    record.save!
    record
  end
end
This gives me the correct print out in my log. But it also says that there's a call to UPDATE that sets profile_id to NULL. Here's some of the output in the log file:
Processing ProfilesController#update (for 127.0.0.1 at 2010-05-28 18:20:54) [PUT]
Parameter: {"commit"=>"Save", ...}
  ?[4;36;1mProfileTag Create (0.0ms)?[0m   ?[0;1mINSERT INTO `profile_tags` 
(`reputation_value`, `updated_at`, `tag_id`, `id`, `profile_id`, `created_at`) VALUES(0, '2010-05-29 01:20:54', 1, NULL, 4, '2010-05-29 01:20:54')?[0m
  ?[4;35;1mSQL (2.0ms)?[0m   ?[0mCOMMIT?[0m
  ?[4;36;1mSQL (0.0ms)?[0m   ?[0;1mBEGIN?[0m
  ?[4;35;1mSQL (0.0ms)?[0m   ?[0mCOMMIT?[0m
  ?[4;36;1mProfileTag Load (0.0ms)?[0m   ?[0;1mSELECT * FROM `profile_tags` WHERE (`profile_tags`.profile_id = 4) ?[0m
  ?[4;35;1mSQL (1.0ms)?[0m   ?[0mBEGIN?[0m
  ?[4;36;1mProfileTag Update (0.0ms)?[0m   ?[0;1mUPDATE `profile_tags` SET profile_id = NULL WHERE (profile_id = 4 AND id IN (35)) ?[0m
I'm not sure I understand why the INSERT puts the value into profile_id properly, but then it sets it to NULL on an UPDATE.
If you need more specifics, please let me know. I'm thinking that the save functionality does many things other than INSERTs into the database, but I don't know what I need to specify so that it will properly set profile_id.