正如我解释的那样,我想根据用户使用不同的数据库。
我得到了一个用devise创建的伙伴表,我创建了多个数据库。这些数据库中的每一个都具有相同的模式和相同的关系。
我想要完成的事情就像是
default: &default
adapter: mysql2
pool: 5
timeout: 5000
development:
<<: *default
database: db_ <%= current_partners%>
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
<<: *default
database: db_ <%= current_partners%>
production:
<<: *default
database: db_ <%= current_partners%>
为什么我不能使用这个陈述?
我正在使用mysql2,如代码片段中所示。
答案 0 :(得分:1)
在database.yml
中,只需提及默认数据库配置即可。无论何时,您希望在数据库之间切换,请在命中相应数据库之前调用用户定义的switch_database
方法连接到另一个数据库。类似的东西:
def switch_database
establish_connection (
:adapter => "mysql2",
:host => "another_host_name",
:username => "username",
:password => "password",
:database => "db_#{current_partner}"
)
end
将上述方法放在适当的文件中,方便您调用。
答案 1 :(得分:0)
database.yml
,此时此类变量不可用,因为它们是特定于请求的。您需要在current_partners
中创建所有数据库,然后告诉rails在控制器中使用哪个数据库。然而,这可能会导致很多并发问题(但不确定,从未实际执行过此操作 - 请参阅下文)。
但请注意,这不是最佳做法。为什么不拥有database.yml
模型,然后改为使用关联?
答案 2 :(得分:0)