Ruby on rails 在rails应用程序中查询不同的模式数据以进行读取+;写
我有两个rails应用程序Ruby on rails 在rails应用程序中查询不同的模式数据以进行读取+;写,ruby-on-rails,ruby,apartment-gem,Ruby On Rails,Ruby,Apartment Gem,我有两个rails应用程序base1和base2 base1使用db1并在此数据库中有多个租户,其使用的是公寓gem base2是单租户应用程序,以数据库db2为主,还使用来自db1的数据 现在问题是,base2应用程序与db1建立了连接,我可以在base2应用程序中获取公共租户中的数据db1数据。如何从base2应用程序中的db1的不同模式中获取数据?根据评论中的讨论 def self.with_schema(schema_name) class_name = self.name +
base1
和base2
base1
使用db1
并在此数据库中有多个租户,其使用的是公寓gem
base2
是单租户应用程序,以数据库db2
为主,还使用来自db1
的数据
现在问题是,
base2
应用程序与db1
建立了连接,我可以在base2
应用程序中获取公共租户中的数据db1
数据。如何从
base2
应用程序中的db1
的不同模式中获取数据?根据评论中的讨论
def self.with_schema(schema_name)
class_name = self.name + schema_name.camelize
table_name = self.table_name
if !Object.const_defined?(class_name)
Object.const_set(
class_name, Class.new(self) do
self.table_name = "#{schema_name}.#{table_name}"
end
)
end
class_name.constantize
end
将此添加到应用程序记录中,您可以执行以下操作:
Data.schema(“schema_name”)。所有您是否经常需要更改base2
应用程序模型中的架构?另外,db1和db2是否共享任何表名?我想我可以帮你,但我需要更多的细节。此外,是否有任何写入操作正在从base 2应用程序对db1执行?base 2是一个单租户应用程序,用于从base1应用程序(一个多租户应用程序)获取数据。我不想更改base2应用程序的架构,因为它有自己的架构。不,我想你没有理解我的评论,让我重新措辞。当您从base2
访问db1
时,您希望告诉它在特定的模式中查找特定的表(不公开)。所以我的问题是,当从base2访问db1时,您需要从不同的模式访问相同的表数据,还是只需要从一个模式访问数据?我的第二个问题是,如果您需要从base2 app对db1进行任何写入。对不起。现在我收到了您的评论。我一次只需要一个模式中的数据。我还想从base2 appOk在db1上编写,有一个table_name选项,您可以将它设置为模型中特定的内容,比如self.table_name='schema_name.table_name'
,但这将强制对所有查询使用相同的模式。这对你有用吗?还是每次查询时都想调整模式?是的!!!!这起作用了,。。。。非常感谢`Data.with_schema('schema_name')。都像方法名。当我将其添加到应用程序记录中时,它不起作用,但当我将其添加到特定模型中时,它起作用了。。。。我想出来了!。。。这将在添加到应用程序记录时起作用。在我的情况下,该模型是从第二个数据库模型继承的(因为我使用的是多个数据库),我应该添加到它从中继承的记录。。。再次感谢!!!:)当我在应用程序记录中添加它时,这对我来说是有效的(id甚至没有在单个模型中添加它)。你的应用程序中可能会出现一些不同的情况。当然,你必须适应你的环境@阿披实卡拉文丹