我有一个名为“tables”的表,里面有一个名为table_name的列。而且,在其他模式中的我的数据库中,我有这个表。像:
db: tables
id table_name other_attributes
1 minerals ...
2 animals ...
db: minerals
id name type
1 rock nil
2 sand nil
表格没有相同的结构。我想把我的模型称为:
> tab = Table.find(1)
> tab.elements.all
=> [ {id: 1, name: 'rock', type: nil}, {id: 2, name: 'sand', type: nil} ]
在这个.elements中使用任何类型的活动记录任务...... 我没有找到任何方法,我找到的最接近的文章是:Rails 3/ActiveRecord: How to switch/change table name during request dynamically?
答案 0 :(得分:1)
我认为在您的情况下最好的方法是直接更新数据库。如果你不喜欢直接编写SQL,你可以依赖一些高级库,例如Sequel,在这种情况下,它们与ActiveRecord强加的约定相关性较小。
答案 1 :(得分:0)
如果您使用的是PostgreSql,您可能会对hstore - http://railscasts.com/episodes/345-hstore感兴趣。使用hstore(它存储json)会简化你的数据库和应用程序:)
答案 2 :(得分:0)
在这个问题之后的一段时间我想(只是想想因为我不知道它是否真的正确)这里是答案:
class TableMaster < ActiverRecord::Base
attr_accessor :db
after_find do
me = self
me.db = Class.new ( ActiveRecord::Base ) do
self.table_name = "schema." + me.tablename
end
true
end
end
只需将其放入模型中,另一个内部就会有一个功能齐全的Active Record模型。 我很高兴我得到了这个答案,但如果它真的是对,我仍然有疑问。请寄给我一些消息。