Это старый вопрос, но для записи вы также можете установить атрибут на ноль (в отличие от пустого), чтобы исключить его из списка обновлений. Я бы не назвал следующий пример лучшей практикой, но я думаю, что это может помочь прояснить, что происходит в фоновом режиме: update_attributes будет пытаться обновить только те атрибуты, которые предоставлены в хэше, имеющие значение, отличное от nil.
params[:csv] = nil if params[:csv].blank? or (arbitrary other condition)
# now update like normal
if @project.update_attributes(project_params)
...
etc.