通常rails使用:select =>加载数据来自数据库的“*”。我知道我可以改变这个。但我想采用另一种方式:始终只选择“id”并在以后需要时自动加载属性。
实施例: 访问user.description应该已经加载了。如果没有,则触发“SELECT FROM FROM WHERE id =#{self.id}”并设置它。
任何人都知道是否有一个rails插件可以做到这一点?或者如何实现它?
谢谢, 科林
答案 0 :(得分:1)
我写了一个Rails插件,它正是这个lazy_columns。请注意,更好的方法是使用要按需加载的大列创建新模型(因为Rails默认情况下会延迟加载相关对象)。
答案 1 :(得分:0)
快速谷歌搜索出现了this,但我和glongman在一起。我无法想象会出现什么样的性能问题......
答案 2 :(得分:0)
明智的做法是将主要的“巨大blob”字段重构为一个单独的模型(如BookBody),这在批量操作模型时通常是不需要的。或者,您可以在查找程序上使用:select
选项
BookWithHugeBlobOfText.find(:first, :select=>"only,small,columns")
选择那种方式的记录将是自读的,因为Rails哲学说(并且理所当然地!)您需要在模型上拥有所有数据来验证它。延迟加载会很不错,但是现在我不鼓励你使用monkeypatch插件。
另一种选择是创建一个只包含轻量级字段并从那里运行ops的SQL视图。