has_many throught and manual handling of updates. Is there something easier ?

Given the model

class Project < ActiveRecord::Base
  has_many :assignments
  has_many :assignees, :class_name => "User", :through => :assignments,
:source => :user

class User < ActiveRecord::Base
  has_many :assignments;

class Assignment < ActiveRecord::Base
  belongs_to :project
  belongs_to :user

I am currently updating the project assignees in my
ProjectsController.update

I first tried to do something like

@project.assignees = User.find(params[:assignee_ids])

but this fails as rails cannot know how to initialize my assignments. I
wish it could!

I've read
http://blog.hasmanythrough.com/articles/2006/08/19/magic-join-model-creation
and
http://blog.hasmanythrough.com/articles/2006/04/17/join-models-not-proxy-collections.

So I am updating my table doing something like:

  def update
    @project = Project.find(params[:id])
    @users = User.find(:all)
    if request.get?
      render :action => 'edit'
    else
      if params[:assignee_ids]
        # FIXME can't this be railsified somehow ?? this is ugly...
        new_assignees = User.find(params[:assignee_ids])
        # remove old ones...
        @project.assignees.each do |old_assignee|
          if ! new_assignees.include? old_assignee
            Assignment.delete_all("user_id = #{old_assignee.id} and
project_id = #{@project.id}")
          end
        end
        # add the new ones
        new_assignees.each do |new_assignee|
          # remove those who are not present anymore
          if ! @project.assignments.include? new_assignee
            @project.assignments.create!(:user => new_assignee)
          end
        end
      else
        # this won't work because I don't have an id column...
        # @project.assignments.clear
        Assignment.delete_all("project_id = #{@project.id}")
      end
      @project.assignments(true)
      if @project.update_attributes(params[:project])
        flash[:notice] = 'Project was successfully updated.'
        redirect_to :action => 'edit', :id => @project
      else
        render :action => 'edit'
      end
    end
  end

Is there something simpler/cleaner ?