Tag: 单例

Ruby on Rails中的Web请求中存在哪些数据(如果有)?

我决定在创建视图助手类时使用单例设计模式。 这让我思考; 单例实例是否会在请求中存活? 这导致了另一个问题, 哪些变量(如果有的话)在Web请求中存在并且是否会根据部署而发生变化? (Fastcgi,Mongrel,Passenger,……) 我知道Controller实例变量没有持久化。 我知道常量是持久的(或重新加载?)。 但我不知道类变量,类的实例变量,Eigenclasses,……

Ruby – 确保只有一个类对象

我有一个Model Bot ,我想确保我的数据库中只有一个Bot对象。 我还需要确保它是持久的而不是被篡改的。 我最初的想法是在迁移中执行此操作,该操作将遵循:bots表迁移。 它将包括一行如下: Bot.all.size == 0 ? Bot.create! : nil 也许这会阻止AR对象在将来的迁移中被搞乱? 奖励:能够对此类对象进行即时和全局访问真是太棒了。 我正在考虑在我的Bot类中使用singleton模块,这样我总是可以引用Bot.instance并且可以访问该特定对象。 使用案例: 我的数据库中有4种类型的用户,这个机器人将通过我们的应用内消息传递function为他们提供特定于角色的消息。 Class Bot将与BotMessage/bot_messages有一个has_many关联。 在bot_messages表上将是user_role的枚举字段。 消息将由公司管理员创建并存储在这些表中,因为我们希望通过查看用户和Bot之间的“对话”线程随时查看这些消息。 当谈到只有1个机器人时,就是这样。 我不需要额外的Bot对象。 此外,由于只有一个对象,因此能够有一种明确定位该对象的方法而不必运行查询来查找它。 例如,与可能有1000条记录的User不同,为了找到特定的记录,你会做类似@user = User.find_by_email(‘foo@bar.com’)事情,对机器人做类似的事情是没有必要的。因为只有一条记录可供查找。 这就是让我相信在这里有一个singleton对象可能是值得的,因此每当我需要为特定角色提取消息时,我可以运行Bot.instance.bot_messages.where(user_role: 1)或类似的东西

Ruby Matrix类的复制/inheritance(core / std lib)

我试图在Ruby中扩展一个现有的Singleton类,作为Matrix类的一个例子。 我的第一个快速和肮脏的解决方案是一个猴子补丁(重新打开类并扩展function)。 但我认为,猴子修补一般不好,特别是如果有人试图覆盖核心类的基本方法,如String,Integer,…… 下一步是找出如何使用新名称(如MatrixExt)获取Matrix类的真实硬拷贝,该名称表现为独立的单例。 MatrixExt = Matrix 没有工作,因为它导致: MatrixExt.scalar(2,0) => Matrix[[0, 0], [0, 0]] 所以我只为同一个单身人士获得多个名字。 不,我想要的。 与clone和dup方法的结果相同。 类inheritance也不起作用: class MatrixExt Matrix[[0, 0], [0, 0]] 这是最令人困惑的部分,因为在自定义类中,可以获得inheritance的类。 (那么,为什么core / std lib类的工作方式不同?) 我目前的解决方案是使用扩展模块,然后在初始化后显式使用.extend ,如: m = Matrix.scalar(2,0).extend(MatrixExtModule) 现在没关系,但我的问题是: 是否有另一种解决方案 – 当是 – 如何做到这一点? (不,复制matrix.rb当然不是一个好方法。; o) 我做错了什么或我认为错误的方式? 提前感谢任何解决方案和/或食物的想法!