0

我正在尝试对事件控制器中的 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 gem 的能力模型,它导致我的应用程序表现得像它应该做的那样,显然现在没有我基于角色的代码。

谁能想到为什么 CanCan 会导致这种情况?

4

1 回答 1

1

CanCan 同时拥有load_resource,authorize_resourceload_and_authorize_resource. 他们都按他们说的做,所以在你的例子中将load_resource设置@event实例变量@event = Event.find(params[:id])authorize_resource只会authorize! @event在每个动作之前调用。load_and_authorize_resource将首先加载资源,然后像以前一样授权。

这是github 上 CanCan 文档的另一个示例:

class ArticlesController < ApplicationController
  load_and_authorize_resource

  def show
    # @article is already loaded and authorized
  end
end
于 2013-06-15T15:43:56.273 回答