Ruby on Rails如何使用“包含”验证?

时间:2011-08-25 10:22:15

标签: ruby-on-rails ruby performance ruby-on-rails-3 validation

我正在使用Ruby on Rails v3.0.9,我在我的模型中有以下代码:

class User < ActiveRecord::Base
  validates :users_role,
    :inclusion => {
      :in      => UserRole.all.map(&:role)
    },
    :presence  => true
end

当我浏览UserRole相关页面(即涉及用户对象实例的页面 - 例如,RoR常规“show”或“index”视图)时,我检查日志文件,我看到执行UserRole SQL查询。也就是说,UserRole.all.map(&:role)运行。

我想知道Ruby on Rails如何适用于上述情况。 它关系到性能? UserRole.all.map(&:role)懒惰加载了吗?

1 个答案:

答案 0 :(得分:0)

在您的开发环境中,您可能会看到该查询在任何验证用户的请求上运行,因为代码会在每个请求上重新加载。在生产模式下尝试一次,在这种情况下不应该发生,因为代码只加载一次而你没有将查询放在lambda中。这里应该没有延迟加载,因为您已在结果集上调用map