#ruby-on-rails #ruby-on-rails-6
#ruby-on-rails #ruby-on-rails-6
Вопрос:
Сегодня мое приложение начало вызывать помощника с неправильным именем.
При загрузке представлений для Drills
Exercise
модели вызывается помощник модели. Это начало происходить сегодня, ничего не меняя.
Например, когда я загружаю представление для Drills
:
Rendering drills/show.html.erb within layouts/application
Rendered drills/show.html.erb within layouts/application (Duration: 3.5ms | Allocations: 1551)
Completed 500 Internal Server Error in 63ms (ActiveRecord: 2.8ms | Allocations: 6965)
ActionView::Template::Error (undefined method `created_at' for nil:NilClass):
3: <div class="flex justify-between items-center mb-4">
4: <h1 class="h3"><%= link_to 'Drills', drills_path %> > Drill on <%= @drill.date_held.strftime('%d/%b/%y') %></h1>
5: <%= link_to 'Download PDF', drill_path(@drill, :pdf), class: "btn btn-link" %>
6: <% if can_edit? %><%= link_to 'Edit', edit_drill_path(@drill), class: "btn btn-link" %><% end %>
7: <% if can_destroy? %><%= link_to 'Delete', drill_path, class: "btn btn-danger outline", method: :delete, data: { remote: true, confirm: "Are you sure?" } %> <% end%>
8: </div>
9:
app/helpers/exercises_helper.rb:6:in `can_edit?'
app/views/drills/show.html.erb:6
Вызывается неправильный контроллер? Как это исправить?
Ответ №1:
Ознакомьтесь с документацией о помощниках Rails: https://api.rubyonrails.org/classes/ActionController/Helpers.html
В дополнение к использованию стандартных шаблонов-помощников, настоятельно рекомендуется создавать пользовательские помощники для извлечения сложной логики или повторно используемой функциональности. По умолчанию каждый контроллер будет включать все помощники. Эти помощники доступны только на контроллере через #helpers
Похоже, у вас уже есть метод, вызываемый can_edit?
в вашем exercises_helper.rb
.
Если вы хотите Drill
, чтобы помощники были только в Drill
контроллере / представлениях, вам нужно будет следовать этому:
Чтобы вернуть старое поведение, установите для config.action_controller.include_all_helpers значение false .