Is this the correct and safest way to update / save a new record? public function saveGoal(Logic_GoalModel &amp;$model)
{
    // New goal
    $isNewGoal = !$model-&gt;id;

    // Populate record
    $record = $this-&gt;getGoalRecordById($model-&gt;id);
    $record-&gt;userId = $model-&gt;userId;
    $record-&gt;goal = $model-&gt;goal;
    $record-&gt;complete = $model-&gt;complete;           

    // Save record
    if($record-&gt;save(false))
    {
        // Populate id
        if($isNewGoal)
        {
            $model-&gt;id = $record-&gt;id;
        }

        return true;
    }
    else
    {
        return false;
    }
}

private function getGoalRecordById($id = null)
{
    if($id)
    {
        $record = Logic_GoalRecord::model()-&gt;findById($id);

        if (!$record)
        {
            throw new Exception(Craft::t('No record exists with the ID “{id}”', array('id' =&gt; $id)));
        }
    }
    else
    {
        $record = new Logic_GoalRecord();
    }

    return $record;
}
It is definitely a way to save record. :)

You might want to be more explicit with validation, though.  i.e.

if ($record-&gt;validate())
{
    // Save record
    if ($record-&gt;save(false))
    {
        // Populate id
        if($isNewGoal)
        {
            $model-&gt;id = $record-&gt;id;
        }

        return true;
    }
    else
    {
        return false;
    }
}
else
{
    $model-&gt;addErrors($record-&gt;getErrors());
}