Действие контроллера вызывается дважды

Я заметил, что действие "index" моего контроллера вызывается дважды.

Действие имеет следующую структуру:

def index

  if params[:tags].nil?
     # [fork #1] just return the whole collection of model
     @items = Item.all
  else
     # [fork #2] filter items by tags
     @items = Item.select_by_tags params[:tags]
  end

  # Another operations with @items
  # The result will be incorrect, because, when tags in params are specified,
  # controller action will be first executed for fork #2, and then for fork #1.
  # In view, i get @items from fork #2 and result of THIS piece of code for fork #1
end

На странице у меня есть ссылки с URL-адресами, например «/items?tags=tag1, tag2», щелкнув по ним, я получаю действие «index», вызываемое дважды.

Я понятия не имею, почему это происходит...


person AntonAL    schedule 14.10.2010    source источник
comment
Какие у вас есть доказательства того, что это вызывается дважды?   -  person Ryan Bigg    schedule 14.10.2010
comment
Спасибо. Я понял это. У меня был вызов AJAX за сценой, который выполнялся после загрузки страницы.   -  person AntonAL    schedule 14.10.2010
comment
Вы можете добавить свое решение в качестве ответа и принять его.   -  person Matt    schedule 14.10.2010


Ответы (2)


Я понял это.

Причиной такого поведения был код JavaScript, вызываемый после загрузки страницы. Этот код реализует глубокие ссылки для некоторых частей страницы.

Будьте осторожны с этим.

Спасибо.

person AntonAL    schedule 15.10.2010
comment
Привет, я замечаю такое же поведение, мое действие контроллера сохраняет некоторые данные в базу данных, и код javascript в моем представлении дважды вызывает это действие, в результате чего в базе данных создаются 2 записи. Когда я комментирую тег ‹script› в представлении, этого не происходит, поэтому я знаю, что это javascript в представлении, повторно вызывающем действие контроллера. Как вы решили это? Какую помощь / документы вы нашли, чтобы помочь. Я так рада, что наткнулась на ваш вопрос! :-) ваше здоровье - person undefined; 08.11.2012

Я столкнулся с аналогичной проблемой, и в нашем случае это был оскорбительный код pjax с 6-секундным тайм-аутом, что привело к одному дополнительному запросу (т.е. одному дополнительному обычному HTML-запросу), если pjax не завершился за 6 с.

person Rohan Daxini    schedule 11.07.2017