#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 /…