10 activerecord blob lazy-loading
除非明确要求,否则如何告诉Activerecord不加载blob列?我的旧数据库中有一些非常大的blob必须被排除在"普通"对象之外.
小智 12
我刚刚使用导轨3遇到了这个问题.
幸运的是,解决起来并不困难.我设置了一个default_scope从结果中删除了我不想要的特定列.例如,在模型中我有一个xml文本字段可能很长,在大多数视图中都没有使用.
default_scope select((column_names - ['data']).map { |column_name| "`#{table_name}`.`#{column_name}`"})
Run Code Online (Sandbox Code Playgroud)
您将从解决方案中看到我必须将列映射到完全限定版本,因此我可以继续使用模型通过关系而不会在属性中出现歧义.之后,你确实希望让这个领域在另一个领域加入.select(:data)以包含它.
我相信您可以要求 AR 在您的调用中加载特定列来查找:
MyModel.find(id, :select => 'every, attribute, except, the, blobs')
Run Code Online (Sandbox Code Playgroud)
但是,当您添加列时,这需要更新,因此它并不理想。我认为没有任何方法可以专门排除 Rails 中的一列(也没有在单个 SQL 选择中)。
我想你可以这样写:
MyModel.find(id, :select => (MyModel.column_names - ['column_to_exclude']).join(', '))
Run Code Online (Sandbox Code Playgroud)
不过,在你相信我的话之前先测试一下这些。:)
| 归档时间: |
|
| 查看次数: |
5029 次 |
| 最近记录: |