【问题标题】:Rails: force column update for routesRails:强制更新路线的列
【发布时间】:2014-10-10 01:38:52
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案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
    

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

    【讨论】:

    • 啊,好多了。谢谢。
    猜你喜欢
    • 2013-08-30
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    相关资源
    最近更新 更多