Метод кэшированного контроллера?
Я пытаюсь внести некоторые изменения в метод show в контроллере событий и заметил, что изменения не имеют значения. Я закомментировал строку @event = Event.find_by_slug(params[:slug]), и представление show все еще работает и не выдает ошибку! Я даже удалил весь метод показа, и он все еще работает. Некоторое время я думал, что работаю над копией приложения, но оно определенно правильное.
У меня никогда не было этой проблемы раньше, но недавно я обновил свою версию Rails с 3.2.0 до 3.2.13. Интересно, есть ли где-то настройка кеширования, которая вызывает это? Кто-нибудь испытывал подобное или получил какие-либо указатели на то, где искать настройки конфигурации кэширования, возможно?
РЕДАКТИРОВАТЬ - Код добавлен
def show
@event = Event.find_by_slug(params[:slug])
@meta_title = "#{@event.headline} at #{@event.venue.name}, #{@event.venue.town} - #{@event.event_date.to_date.to_formatted_s(:my_format)}"
@meta_description = "#{@event.info.to_s.truncate(380, :separator => " ")}"
@facebook_image = "#{@event.event_image.url(:large)}"
respond_to do |format|
format.html # show.html.erb
format.json { render :json => @event }
end
end
Представление довольно большое, но я бы назвал поля, используя что-то вроде этого:
<h2><%= @event.headline %> TEST</h2>
"TEST" - это то, что я только что добавил, чтобы увидеть, будет ли это визуализировано, и это так, поэтому я определенно редактирую правильную версию приложения.
РЕДАКТИРОВАТЬ - Новая разработка в поиске этой ошибки
После долгих поисков дурацких действий и т. Д. Я постепенно начал пытаться вручную найти причину. Сначала создадим новую модель и посмотрим, произошло ли то же самое поведение, но не произошло. Затем, глядя на то, что отличалось, сверху вниз в моем контроллере событий, я начал комментировать строки / действия, а затем тестировать поведение. Во всяком случае, комментируя load_and_authorize_resource
который я использую для вызова гема CanCan, и именно благодаря его модели способностей мое приложение ведет себя так, как и должно, теперь, очевидно, без моего кода на основе ролей.
Кто-нибудь может подумать, почему CanCan может быть причиной этого?
1 ответ
CanCan есть оба load_resource
, authorize_resource
а также load_and_authorize_resource
, Все они делают то, что говорят, поэтому в вашем примере будет load_resource
установить @event
переменная экземпляра @event = Event.find(params[:id])
, authorize_resource
просто позвонит authorize! @event
перед каждым действием. load_and_authorize_resource
сначала загрузит ресурс, а затем авторизуется, как и раньше.
Вот еще один пример из документации CanCan на github:
class ArticlesController < ApplicationController
load_and_authorize_resource
def show
# @article is already loaded and authorized
end
end