Rails:强制路由列更新

时间:2014-10-10 01:38:53

标签: ruby-on-rails ruby ruby-on-rails-3 caching routes

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

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 个答案:

答案 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

如果可能的话,只需使用我的解决方案。