gpt4 book ai didi

ruby-on-rails - 如何在 Ruby 中为模型创建延迟加载属性?

转载 作者:数据小太阳 更新时间:2023-10-29 06:45:39 24 4
gpt4 key购买 nike

我想创建一个延迟加载的属性,它返回模型上的一个集合,我该怎么做?

我不想为此创建关联。

所以我希望它返回一个集合,如果集合还没有被初始化然后访问数据库,返回行,然后初始化它。

如果它运行一次,则无需再次运行它,因为下一个页面请求将重新开始。

最佳答案

添加实例属性(例如@my_attribute)

然后定义

def my_attribute
@my_attribute ||= initialize_my_attribute
end

(注意:initialize_my_attribute 是您实现的函数/方法,它将加载您想要的值。)

这是如何工作的:该属性以一个 nil 值开始(我们没有给它赋值)。对象实例不能直接访问它,因为我们还没有在它上面定义属性访问器。相反,我们有一个与属性具有完全相同名称的方法,因此当您调用 my_object.my_attribute 时,它看起来就像您在实际调用对象实例的方法。

方法中发生了什么? ||= 简写等同于

@my_attribute = (@my_attribute || initialize_my_attribute)

因此,如果 @my_attribute 已经有值,则返回该值。否则,@my_attribute 得到一个赋值(然后返回)。换句话说:该值将在第一次访问时加载到 @my_attribute 中(并且仅在第一次访问时)。

瞧!延迟加载。

关于ruby-on-rails - 如何在 Ruby 中为模型创建延迟加载属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5222153/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com