Я думаю, что ответ Джозефа довольно хорош. Хотя я бы сделал все это в действии snippets_controller:
def create
@snippet = Snippet.new(params[:snippet])
@snippet.tags = params[:tags].split(',').collect { |tag| Tag.find_or_create_by_name(tag) }
if @snippet.save
# do something when successful
else
# do something when saving failed
end
end
Извините за это длинное утверждение в одну строку. ; -)
Я не тестировал код, но надеюсь, что он работает.
Tag.find_or_create_by_name
сделает именно это: когда тег с таким именем существует, он вернет его, иначе он создаст новый тег на лету и вернет его.
Таким образом, теги уже сохранены, за до вы звоните @snippet.save
.
Обратите внимание, что я только что предположил, как называются ваши переменные и параметры.