# File model/model.rb, line 408
    def initialize(dbh, cookbook_id)
        raise "Invalid DBH" if not dbh.kind_of?(DBI::DatabaseHandle)
        raise "Bad Record ID" if dbh.select_one("select * from cookbook where cookbook_id=?", cookbook_id).nil?

        @dbh = dbh
        @id = cookbook_id
        @categories = ObservableArray.new
        @dbh.select_all("select category_id from category where cookbook_id=?",@id).each do |row|
            @categories << $replicator.get('category', row['category_id'])
        end
        @categories.add_observer {
            # which recipes were previously in the DB?
            old_categories = []
            @dbh.select_all("select category_id from category where cookbook_id=?",@id).each do |row|
                old_categories << $replicator.get('category', row['category_id'])
            end

            # add any new ones to the DB
            (@categories - old_categories).each do |category|
                @dbh.do("update category set cookbook_id=? where category_id=?",@id,category.id)
            end

            # remove any no longer used from the DB
            (old_categories - @categories).each do |category|
                @dbh.do("delete from category where category_id=?",category.id)
                @dbh.do("delete from recipe_category where category_id=?",category.id)
            end
        }
    end