У меня есть действие create на одном из моих контроллеров, которое отвечает на запросы ajax и html. Внутри действия создания я установил переменную экземпляра (@location), используя find_or_initialize_by_such_and_such. Затем я проверяю, существует ли местоположение или нет, используя это:
if @location.id.nil?
@location.save
respond_with(@location, :location => root_path) do |format|
format.html { redirect_to root_path }
end
end
Это прекрасно работает, так как в основном часть (create.js.erb) добавляет вновь сохраненный объект местоположения в список.
Проблема возникает, когда пользователь вводит местоположение, которое уже существует (то есть имеет идентификатор). В таком случае я не хочу, чтобы найденное местоположение добавлялось в список, так как это вызвало бы дублирование (все местоположения уже есть). Поскольку @location.id.nil?
является ложным в этом сценарии, код в вышеуказанном блоке, очевидно, не выполняется, но мне трудно понять, как справиться с этой ситуацией. Я пытался сделать что-то вроде:
respond_with(nil, :location => root_path) do |format|
format.html { redirect_to root_path }
end
но файл js.erb по-прежнему захватывает переменную экземпляра @location и выполняет javascript, который добавляет объект в список.
Каков наилучший способ обойти эту проблему, чтобы в случаях, когда find_or_initialize_by возвращал уже созданный объект, ответ не выполнял javascript для добавления этого объекта в список?