我正在尝试对我的事件控制器中的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会造成这种情况?
答案 0 :(得分: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 documentation on github的另一个例子:
class ArticlesController < ApplicationController
load_and_authorize_resource
def show
# @article is already loaded and authorized
end
end