Ruby on rails 动态设置表名,一个bug?

Ruby on rails 动态设置表名,一个bug?,ruby-on-rails,ruby,Ruby On Rails,Ruby,database.yml看起来像 development: adapter: mysql2 host: localhost database: database1 username: root password: external: adapter: mysql2 host: localhost database: database2 username: root password: 我有一个类ExternalDatabaseConnection

database.yml看起来像

development:
  adapter: mysql2
  host: localhost
  database: database1
  username: root
  password: 

external:
  adapter: mysql2
  host: localhost
  database: database2
  username: root
  password: 
我有一个类ExternalDatabaseConnection

这不是

ExternalDatabaseConnection.table_name = "set_different_table" #dynamic
ExternalDatabaseConnection.create(...)
投掷

unknown attribute: attribute_name
这两种情况都是在循环中发生的,所以每次对初始表集有效时,对于第二个表,它都会抛出一个错误

调试:

注:

ExternalDatabaseConnection.table_name = "payments"

ExternalDatabaseConnection.column_names
 => ["id", "customer_id", "patent_id", "amount", "currency", "date"]

ExternalDatabaseConnection.table_name = "patents"
 => "patents" 

2.0.0-p451 :006 > ExternalDatabaseConnection.column_names
 => ["id", "customer_id", "patent_id", "amount", "currency", "date"]

ExternalDatabaseConnection.all
ExternalDatabaseConnection Load (0.4ms)  SELECT `patents`.* FROM `patents` 
=> [#<ExternalDatabaseConnection id: 1, number: "1111", description: "https://www.google.co.in", registry_date: "2014-08-20", documnetdir: nil, currency: #<BigDecimal:a8f2adc,'0.1212E2',18(27)>>, #<ExternalDatabaseConnection id: 4, number: "1", description: "jhufgtrdfyuh", registry_date: nil, documnetdir: "", currency: #<BigDecimal:a8f2258,'0.0',9(18)>>, ....]
属性没有变化,这可能是导致问题的原因

如果缺少任何信息,请进行评论

ruby 2.0.0p451

轨道3.2.17

编辑1:

尝试:

在设置表名之前

1 ExternalDatabaseConnection.table_name=nil。 2外部数据库连接。清除\u活动\u连接!并清除所有连接! 3尝试使用集合表格名称:表格1

编辑2:


ClassName.column\u名称即使在为类设置了不同的表\u名称后也不会更改

我尝试了以下方法。这可能会有帮助

:set_table_name方法用于动态更改表名。您可以设置表名并获取属性名而不是列名

付款表

ExternalDatabaseConnection.set\表\名称:付款

ExternalDatabaseConnection.first.attribute\u名称

然后必须重置列信息

ExternalDatabaseConnection.reset\u列\u信息

专利:

ExternalDatabaseConnection.set\u表\u名称:专利

ExternalDatabaseConnection.first.attribute\u名称


我试过这样做。这可能会有帮助

:set_table_name方法用于动态更改表名。您可以设置表名并获取属性名而不是列名

付款表

ExternalDatabaseConnection.set\表\名称:付款

ExternalDatabaseConnection.first.attribute\u名称

然后必须重置列信息

ExternalDatabaseConnection.reset\u列\u信息

专利:

ExternalDatabaseConnection.set\u表\u名称:专利

ExternalDatabaseConnection.first.attribute\u名称


从您发布的控制台图像,我可以看到您正在提供ExternalDatabaseConnection.createnumber:1234,但指定的表中没有明显为您提供未知属性编号的数字列。我想您是想提供ExternalDatabaseConnection.createamount:1234@Pavan检查注释最后一点ExternalDatabaseConnection.all结果。您要创建的图像如何我没有看到任何名为number ExternalDatabaseConnection.column\u names output的列。哪个特定的rails版本Rails 3'涵盖了您发布的控制台图像中的30多个版本,我可以看到您正在提供ExternalDatabaseConnection.createnumber:1234,但指定的表中没有明显为您提供未知属性编号的数字列。我想您是想提供ExternalDatabaseConnection.createamount:1234@Pavan检查注释最后一点ExternalDatabaseConnection.all结果。您要创建的图像如何我没有看到任何名为number ExternalDatabaseConnection.column\u names output的列。哪个特定的rails版本Rails 3'涵盖30多个版本您必须重置列信息以及我更新了answerNice!你还需要帮助吗?如果你愿意的话,我可以开始聊天so@Hudsontable_name=可以代替set_table_name。当set_table_name运行queryNice时。等我有空的时候我会用这个的@RichPeck感谢您的反馈。您必须重置列信息,我更新了答案尼斯!你还需要帮助吗?如果你愿意的话,我可以开始聊天so@Hudsontable_name=可以代替set_table_name。当set_table_name运行queryNice时。等我有空的时候我会用这个的@RichPeck感谢您的反馈。
unknown attribute: attribute_name
ExternalDatabaseConnection.table_name = "payments"

ExternalDatabaseConnection.column_names
 => ["id", "customer_id", "patent_id", "amount", "currency", "date"]

ExternalDatabaseConnection.table_name = "patents"
 => "patents" 

2.0.0-p451 :006 > ExternalDatabaseConnection.column_names
 => ["id", "customer_id", "patent_id", "amount", "currency", "date"]

ExternalDatabaseConnection.all
ExternalDatabaseConnection Load (0.4ms)  SELECT `patents`.* FROM `patents` 
=> [#<ExternalDatabaseConnection id: 1, number: "1111", description: "https://www.google.co.in", registry_date: "2014-08-20", documnetdir: nil, currency: #<BigDecimal:a8f2adc,'0.1212E2',18(27)>>, #<ExternalDatabaseConnection id: 4, number: "1", description: "jhufgtrdfyuh", registry_date: nil, documnetdir: "", currency: #<BigDecimal:a8f2258,'0.0',9(18)>>, ....]