动态创建具有真实ID作为另一个模型的属性的模型

时间:2014-01-13 21:51:06

标签: ruby-on-rails ruby model ruby-on-rails-4

我有一个名为“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?

3 个答案:

答案 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模型。 我很高兴我得到了这个答案,但如果它真的是对,我仍然有疑问。请寄给我一些消息。