идентификатор URL-адреса случайно заменен значком в rails

#ruby-on-rails #ruby-on-rails-5

#ruby-on-rails #ruby-on-rails-5

Вопрос:

Я некоторое время работал над проектом rails (rails 5.2.4). Большинство вещей отлично работают. Но иногда я сталкиваюсь с проблемой , заключающейся в том, что id включенный в URL -адрес случайно заменяется строкой favicon .

Например, здесь я ввел http://myproject.com/objects/153 . Журнал показывает

 I, [2020-10-22T20:45:17.394223 #14]  INFO -- : Processing by ObjectController#show as 
I, [2020-10-22T20:45:17.394289 #14]  INFO -- :   Parameters: {"id"=>"favicon"}
I, [2020-10-22T20:45:17.401109 #14]  INFO -- :   Rendered object/show.html.erb within layouts/application (3.5ms)
I, [2020-10-22T20:45:17.401247 #14]  INFO -- : Completed 500 Internal Server Error in 7ms (ActiveRecord: 0.4ms)
  

Причина, по которой код, в конце концов, показывает 500, заключается в том, что существует действие before для получения записи с помощью Object.find() . Но, по-видимому, как id и было заменено favicon , нужная запись не может быть найдена.

Но если я набрал другой URL http://myproject.com/objects/151 -адрес, он работает хорошо. В журнале вы можете увидеть

 I, [2020-10-22T20:45:17.394223 #14]  INFO -- : Processing by ObjectController#show as 
I, [2020-10-22T20:45:17.394289 #14]  INFO -- :   Parameters: {"id"=>"151"}
I, [2020-10-22T20:45:17.401109 #14]  INFO -- :   Object Load (0.2ms)  SELECT  "objects".* FROM "objects" WHERE "objects"."id" = ? ORDER BY "objects"."name" ASC LIMIT ?  [["id", 151], ["LIMIT", 1]]
  

Routes.rb настроен как

 resources :objects, only: [:new, :create, :show, :edit, :index, :update, :destroy ]
  

Поэтому я понятия не имею, почему один и тот же код работает для одного случая, но не может работать с другим. И я понятия не имею, как отлаживать. Как и в самой первой строке кода @object = Object.find(params[:id]) .

Для получения дополнительной информации см. Приложение / просмотры / макеты / application.html.erb, Прикрепленный ниже.

 <!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <% app = respond_to?(:app_name) ? app_name : "Define helper method 'app_name'"%>
    <title>
      <%= app %>
    </title>
    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
    <!--[if lte IE 9]>
      <%= split_stylesheet_link_tag 'application' %>
    <![endif]-->
    <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
    <%= csrf_meta_tags %>
    <%= google_analytics %>
    <%= favicon_link_tag %>
  </head>
  <body class="<%= controller_name %> <%= action_name %>" style="background-color: #f6f6f6; margin-bottom: 50px;">
    <% content_style = "" %>
    <% if @redirect_to_if_iframe %>
      <% content_style = "display:none" %>
    <% end %>
    <div id="maincontent" style="<%= content_style %>">
      <% if @redirect_to_if_iframe %>
        <%= javascript_tag("redirect_if_iframe('#{@redirect_to_if_iframe}', 'maincontent');") %>
      <% end %>
      <div id="headerbar" style="display:block; position: fixed; top:0; width: 100%; z-index: 9999999;">
        <%= javascript_tag("handlePortal('headerbar');") %>   <!-- found in datacommon.js -->
        <header>
          <nav class="navbar navbar-default myproject-nav" role="navigation" style="height: 71px !important;">
            <div class="container-fluid">
              <!-- Brand and toggle get grouped for better mobile display -->
              <div class="navbar-header">
                <div class="navbar-brand">
                  <%= image_tag "https://cloud.data-static.myproject.com/resources/images/current/logos/myproject-white.png", :align=>'middle', :alt=>"MyProject logo"%>
                </div>
              </div>
              <%if action_name != 'welcome' %>
                <div class="app_name_text", style="color: white; float: left;">
                  <%= app %>
                </div>
                <%= render :partial=>'layouts/myproject/userinfo' %>
              <%end%>
            </div>
          </nav>
        </header>
      </div>
      <%if action_name != 'welcome' %>
        <%= render :partial=>"layouts/myproject/navbar" %>
      <%end%>
      <div class="loading-container" style="margin-top: 100px;">
        <!--      <div class="loading-container">-->
        <div class="loading">
          <div class="icon">
            <%= image_tag "loading.gif" %>
          </div>
        </div>
        <div class='container-fluid yield'
             style="background-color: white;
                    height: max-content;
                    width: 95%;
                    margin-top: 150px;
                    position: relative;
                    border-radius: 5px;">
          <%= yield %>
        </div>
      </div>
    </div>
  </body>
  <%= send_tracking_data %>
</html>
  

Обновить:
Хотя я нахожу основную причину этой проблемы, но я все еще не могу объяснить, почему фактический идентификатор заменяется favicon строкой. Основная причина заключается в том, что html для соответствующей страницы просмотра может быть поврежден из-за некоторой проблемы с форматированием модели, если пользователь вводит неверный ввод. Этот тип ввода не является недопустимым для модели, но недопустимым для отображения HTML-кода. Итак, страница отображается 500 . Но я должен увидеть журнал, в котором указывается, что идентификатор является фактическим, затем в определенной строке на странице просмотра возникает ошибка. Но он показывает {"id"=>"favicon"} первый, который я до сих пор не могу объяснить.

Комментарии:

1. Пожалуйста, поделитесь своим app/views/layouts/application.html.erb файлом. Я ищу то, что находится в <head> теге.

2. @MikeGorski Я добавил файл.

3. Видите ли вы запрос с фактическим идентификатором перед этим favicon в журналах?

4. Браузер пытается получить значок, возможно, на странице ошибки нет мета-тега favicon, и он пытается получить текущий путь favicon.ico запуск этого запроса, который соответствует маршруту показа объекта.

5. Вероятно, у вас другой уровень журнала в рабочей среде guides.rubyonrails.org /…