在rails控制台中无范围工作但在控制器操作中无效

时间:2012-12-12 12:41:53

标签: ruby-on-rails

我有default_scope的模型:

class Campaign < ActiveRecord::Base
  default_scope where("campaigns.status != ?", "archive")
end

然后我需要在show action中禁用此范围:

@campaign = Campaign.unscoped.find(params[:id])

但我看到Couldn't find Campaign with id=1 [WHERE (campaigns.status != 'archive')]

然后我在rails console中尝试了相同的解决方案:

 Campaign.unscoped.find(1)
 SELECT `campaigns`.* FROM `campaigns` WHERE `campaigns`.`id` = 1 LIMIT 1 

一切正常,我在控制器中做错了什么?

更新

Campaign.unscoped { }

也没用。似乎@campaign在其他地方和之前确定过,因为我删除了show动作中的所有行,现在它看起来像:

def show
end

我仍然收到此错误:Couldn't find Campaign with id=1 [WHERE (campaigns.status != 'archive')]

我在load_and_authorize_resource中找到了这个技巧,但我该如何解决呢?

2 个答案:

答案 0 :(得分:2)

参考this

Campaign.unscoped {
  Campaign.find(params[:id]) 
}

答案 1 :(得分:1)

根据文档,看起来你的工作正常。但是,有人提到here建议使用无结构的块形式。您可以尝试一下,看看它是否能解决问题。