It is a base class for ResultSets providing just one method: recur- sive_update which works just like update_or_create but can recursively update or create data objects composed of multiple rows. All rows need to be identified by primary keys - so you need to provide them in the update structure (unless they can be deduced from the parent row - for example when you have a belongs_to relationship). If not all colums comprising the primary key are specified - then a new row will be cre- ated, with the expectation that the missing columns will be filled by it (as in the case of auto_increment primary keys).