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
我希望 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