缓存控制器方法?

时间:2013-05-25 11:29:12

标签: ruby-on-rails ruby ruby-on-rails-3 cancan

我正在尝试对我的事件控制器中的show方法进行一些更改,并注意到这些更改没有区别。我注释掉@event = Event.find_by_slug(params [:slug])行,show视图仍然有效,不会产生错误!我甚至删除了整个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'是我刚刚添加的内容,看看是否会呈现它,所以我肯定正在编辑应用程序的正确版本。

编辑 - 发现此错误的新发展

在广泛搜索欺骗行为等之后,我逐渐开始尝试手动查找原因。首先通过搭建一个新模型并查看是否发生了相同的行为,但事实并非如此。然后在我的事件控制器中从上到下查看不同的内容,我开始注释掉行/操作然后测试行为。无论如何,评论我用来调用CanCan gem的load_and_authorize_resource和它的能力模型导致我的应用程序按照应有的方式运行,显然现在没有基于角色的代码。

有谁能想到为什么CanCan会造成这种情况?

1 个答案:

答案 0 :(得分:1)

CanCan同时拥有load_resourceauthorize_resourceload_and_authorize_resource。他们都按照他们的意思行事,因此在您的示例中,load_resource会设置@event实例变量@event = Event.find(params[:id])authorize_resource只会在每次操作前致电authorize! @eventload_and_authorize_resource将首先加载资源,然后像以前一样进行授权。

以下是CanCan documentation on github的另一个例子:

class ArticlesController < ApplicationController
  load_and_authorize_resource

  def show
    # @article is already loaded and authorized
  end
end