使用self.table_name时使用SQLite3指定数据库名称

时间:2013-11-14 19:23:16

标签: ruby-on-rails sqlite activerecord

我有一个遍历多个数据库的has_many,例如:

class Foo
  establish_connection :database1
  has_many :bars
end

class Bar
end

在正常情况下,事情还可以.Foo使用database1,Bar使用Rails环境数据库(根据database.yml)。不幸的是,这种联系被打破了:

Table 'database1.bars' doesn't exist

我在线阅读了几个我需要专门用self.table_name=指定数据库名称的地方。 SQLite3似乎没有数据库名称?我想做

self.table_name = '<something>.bars'

在我的Bar模型中。这可能与SQLite3一起使用吗?

1 个答案:

答案 0 :(得分:1)

默认情况下,SQLite会创建一个名为main的数据库,该数据库附加到.db文件。因此,您可以尝试按如下方式引用main数据库:

self.table_name = 'main.bars'

ATTACH DATABASE官方文档第二段中的更多信息。

注意:不确定它是否适用于Ruby我只是直接尝试使用sqlite,如下所示:

D:\sqlite3>sqlite3 test.db
SQLite version 3.7.17 2013-05-20 00:56:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TABLE User(user_id INTEGER PRIMARY KEY,name VARCHAR);
sqlite> INSERT INTO User(name) VALUES('dic19');
sqlite> INSERT INTO User(name) VALUES('Logan Serman');
sqlite> SELECT * FROM User;
1|dic19
2|Logan Serman
sqlite> .databases
seq  name             file
---  ---------------  ----------------------------------------------------------
0    main             D:\sqlite3\test.db
sqlite> SELECT * FROM main.User;
1|dic19
2|Logan Serman
sqlite>

使用.databases命令,您可以获得附加数据库的所有名称和文件的列表:

.databases             List names and files of attached databases

<强>截图

enter image description here