Рельсы откликаются ни с чем? - PullRequest
0 голосов
/ 28 марта 2011

У меня есть действие 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 для добавления этого объекта в список?

1 Ответ

1 голос
/ 28 марта 2011

удалить

respond_with(nil, :location => root_path) do |format|
  format.html { redirect_to root_path }
end 

и оставьте только это

redirect_to root_path

если вы не ответили

...