Ruby单联Class

Ruby Singletion Class

我希望 HomePage 模型成为 Singleton class,因为我只想要 [=] 的一个实例30=]主页 模型。所以这就是我所做的:

require 'singleton'

class HomePage < ApplicationRecord

  include Singleton
  has_one_attached :image

end

HomePagesController 中,我希望用户能够 编辑 HomePage 模型的唯一实例。所以,我做了这样的事情:

class HomePagesController < AdminDashboardsController
  def edit
    @home_page = HomePage.instance
  end
end

问题:

默认值即HomePage.instancereturnsnil。我猜测该实例不是 persisted,因为它 returns false 对于 presisted? 方法调用。

我希望能够第一次创建唯一实例,即使用种子数据覆盖我从 HomePage.instance 获得的 nil 实例,或者 rails 控制台,然后让用户能够根据需要编辑该实例,使用上面代码中所示的主页控制器。

我尝试了什么:

我尝试通过调用 HomePage.instance.update(name: "Hello") 更新主页模型的初始唯一实例。这似乎用 id:2 创建了一个不同的实例,而不是覆盖以前的唯一对象。

我是不是错过了什么?还是我误解了 Singleton class 本身的整体用途?

问题是单例是关于 Ruby 对象,而不是关于数据库中的记录。由于多线程,Rails 中的进程是隔离的

因此,如果您只需要保留一条记录,请不要使用 require 'singleton'

定义方法

def self.get
  first || create # more Rails way - first_or_create
end

def self.get
  first || new # more Rails way - first_or_initialize
end

并在您的代码调用中 HomePage.get