Я предполагаю, что ваш метод assign_topics
виноват.Topic.find_or_create_by_name
вернет один экземпляр Topic
, затем вы присваиваете его self.topics
, а self.topics
, вероятно, ожидает Array
(или некоторый другой Enumerble
);затем позже процесс обновления попытается перебрать self.topics
, используя each
, и вы получите ошибку.
В комментарии вы упоминаете, что пытались что-то вроде этого:
self.topics = @topic_names.each { |n| Topic.find_or_create_by_name(n) }
Но это не сработает, потому что each
возвращает исходный массив , поэтому вышеприведенное эквивалентно следующему:
@topic_names.each { |n| Topic.find_or_create_by_name(n) }
self.topics = @topic_names
и всем Topic
экземплярам, которые вынайденные / созданные просто выбрасываются.
Итак, вам может повезти, если вы используете collect
, например:
def assign_topics
if @topic_names
self.topics = @topic_names.collect { |n| Topic.find_or_create_by_name(n) }
end
end