Вы можете избежать создания нового навыка, проверив его имя на уникальность:
class Skill < ActiveRecord::Base
validates_uniqueness_of :name
end
Полагаю, вы действительно хотите знать, как связать существующий навык с именем, которое они указали новому пользователю, вместо создания нового навыка, когда он уже существует.
Если вы пытаетесь это сделать, это подсказывает мне, что атрибуты вообще не должны быть вложенными.
Возможно, вы могли бы сделать это с помощью обратного вызова before_save
, если бы вы действительно этого хотели, но, опять же, это как бы побеждает назначение вложенных атрибутов:
class User << ActiveRecord::Base
before_save :check_for_existing_skill
def check_for_existing_skill
if self.skill
existing_skill = Skill.find_by_name(self.skill.name)
if existing_skill
self.skill = existing_skill
end
end
end
end