Bla*_*man 10 ruby ruby-on-rails
我想创建一个延迟加载的属性,返回模型上的集合,我该怎么做?
我不想为此创建关联.
所以我希望它返回一个集合,如果集合尚未初始化,然后点击数据库,返回行,然后初始化它.
如果它运行一次,则无需再次运行它,因为下一页请求将重新启动.
Dav*_*ulc 21
添加实例属性(例如@my_attribute)
然后定义
def my_attribute
  @my_attribute ||= initialize_my_attribute
end
Run Code Online (Sandbox Code Playgroud)
(注意:initialize_my_attribute您实现的函数/方法将加载您想要的值.)
这是如何工作的:属性从一个nil值开始(我们没有为它分配任何东西).对象实例无法直接访问它,因为我们尚未在其上定义属性访问器.相反,我们有一个与属性具有完全相同名称的方法,因此当您调用my_object.my_attribute它时,看起来就像在实际调用对象实例的方法时访问该属性一样.
方法会发生什么?该||=短手相当于
@my_attribute = (@my_attribute || initialize_my_attribute)
Run Code Online (Sandbox Code Playgroud)
因此,如果@my_attribute已经有值,则返回该值.否则,@my_attribute获取一个值(然后返回).换句话说:该值将在@my_attribute第一次访问时加载(并且仅在第一次加载).
瞧!懒加载.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           5053 次  |  
        
|   最近记录:  |