gpt4 book ai didi

ruby-on-rails - ActiveRecord:在没有 Rails 的情况下使用 ActiveRecord 时如何在 AR 模型之间共享连接

转载 作者:数据小太阳 更新时间:2023-10-29 08:08:03 27 4
gpt4 key购买 nike

我正在尝试在没有 Rails 的情况下使用 ActiveRecord,以创建一个连接到 MySql 数据库的 gem。与数据库的连接应该是可设置的,因为 gem 主要用于控制台使用,所以我不想事先在 YAML 文件中提供数据库连接信息,而是“即时”提供。这似乎带来了很多问题,因为 ActiveRecord 模型在初始化时加载数据库信息。是否有任何其他共享数据库信息的方式或某种方式使 active_record 不预加载数据库配置?有没有比“establish_connection”更好的共享连接信息的方法?

这是我的代码:

class Blog 
@@options = { :adapter => "mysql2" }

def self.options
@@options
end

def initialize(options = Hash.new)
@@options = {
:adapter => "mysql2",
:host => options[:host] || "localhost",
:username => options[:user] || "root",
:password => options[:pass] || "",
:database => options[:db] || "my_blog"
}
end
end

module Foobar
class Post < ActiveRecord::Base
establish_connection(Blog.options)
end
end

在命令行上

Blog.new(user:"foo",pass:"bar",db:"bang")
p=Foobar::Post.all

最佳答案

您应该只调用 ActiveRecord::Base.establish_connection(...)

class Blog
# No need to use initializer method if you don't intend
# to use initialized instance. Static method will do better.
def self.connect(options = Hash.new)
ActiveRecord::Base.establish_connection(
adapter: "mysql2",
host: options[:host] || "localhost",
username: options[:user] || "root",
password: options[:pass] || "",
database: options[:db] || "my_blog"
)
end
end

module Foobar
class Post < ActiveRecord::Base
# Connection is done via Blog model
end
end

Blog.connect(username: 'john', password: 'qwerty')
posts = Foobar::Post.all

关于ruby-on-rails - ActiveRecord:在没有 Rails 的情况下使用 ActiveRecord 时如何在 AR 模型之间共享连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31761450/

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