Добавьте метод в вашей пользовательской модели:
class User < ActiveRecord::Base
def assign_core_value(v)
core_values.find_by_name(v) || ( self.core_values <<
CoreValue.find_or_create_by_name(:name => v, :created_by => self)).last
end
end
Метод assign_core_value
отвечает требованию 1,2 и возвращает значение ядра, назначенное пользователю (с заданным именем).
Теперь вы можете сделать следующее:
current_user.assign_core_value(v)
Примечание 1
Метод логики выглядит следующим образом:
1) Проверяет, связано ли CoreValue с пользователем. Если так, никаких действий не предпринимается, возвращается значение ядра.
2) Проверяет, существует ли CoreValue с указанным именем. Если не создает CoreValue. Связывает значение ядра (создано / найдено) с пользователем.