I would create a table for your options, then have a join table that records the checked options
Then you can add :dependent => :destroy to the relationship on the options side. That would remove the record in the join table when the option is removed.
Here is an example of a many to many:
def User < ActiveRecord::Base
has_many :preferences, :dependent=>:destroy
has_many :options, :through=>:preferences
end
def Preferences < ActiveRecord::Base
belongs_to :user
belongs_to :option
end
def Option < ActiveRecord::Base
has_many :preferences, :dependent=>:destroy
has_many :users, :through=>:preferences
end
If you need to you can create multiple join tables, for the different kind of options. Say for background color you need a join that allows you to also store the color with the association, or maybe for pagination you need to store an integer for articles on a page, that could be another model. Or you could just add a single string value tot he join table and store associated data as a string and use only the one.