2014-10-10 68 views
0

我有一个匹配列值的路由约束。工作正常,但它似乎缓存值,以便新值不匹配。我如何强制这个班的重新加载?Rails:强制列更新路线

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 

我需要强制更新它以某种方式。

回答

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 

或者如果可能的话,请使用我的解决方案。

+0

啊,那太好了。谢谢。 – 2014-10-11 21:12:43