我有一个这样的模型:
class Engineer < ActiveRecord::Base
default_scope { is_published }
scope :is_published, -> { where(is_published: true) }
end
可以通过GitHub在网站上授权工程师。而且我希望能够在网站上为未发布的工程师授权。某些控制器中有这样的过滤器:
before_action :authenticate_engineer!, only: [:show]
但是现在成功授权工程师仍然无法通过这些过滤器。怎么说设计他应该在无范围的工程师之间搜索?想想,我应该覆盖一些Devise方法...
答案 0 :(得分:2)
解决方法是在Engineer.rb中重写此Devise方法:
def self.serialize_from_session(key, salt)
Engineer.unscoped {super}
end
答案 1 :(得分:0)
如果我正确理解你,你想要:
请勿使用默认范围,而是执行以下操作:
# engineer.rb
class Engineer < ActiveRecord::Base
scope :published, -> { where(is_published: true) }
end
在你的控制器中:
# engineers_controller.rb
def show
@engineers = engineer_signed_in? ? Engineer.all : Engineer.published
end
基本上,您要向经过身份验证的工程师展示所有工程师,而对于那些未使用Devise登录的工程师,只展示已发布的工程师。