我有一个匹配列值的路由约束。工作正常,但它似乎缓存值,以便新值不匹配。如何强制重新加载此类?
class ClientCodeConstraint
def matches?(request)
@client_code = request.path_parameters[:client_code]
users.each { |u| return true if @client_code == u.client_code }
false
end
private
def users
@users ||= User.all
end
end
我需要以某种方式强制更新它。
答案 0 :(得分:1)
首先,您的代码似乎非常糟糕。如果可能,您应该只进行一次数据库查询,而不是检索所有用户。
class ClientCodeConstraint
def matches?(request)
User.where(client_code: request.path_parameters[:client_code]).any?
end
end
我认为问题出在@users ||= User.all
。您正在实例变量中缓存User.all结果,因此它不会更新。您根本不需要使用实例变量。选择您的用户方法:
def users
User.all
end
如果可能的话,只需使用我的解决方案。