2014-10-10 70 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