Rails - Belongs_to Model,其中Model可以是实现关系的任何模型吗?

时间:2012-03-04 04:46:08

标签: ruby-on-rails activerecord associations rails-activerecord

是否可以在Rails 3中实现一个关联

class ApiCredentials < ActiveRecord::Base
  belongs_to Model

end

其中Model可以是任何模型。

然后在api_credentials表格中,我有model_idmodel等字段来跟踪此关联。

我不认为方便的标准ActiveRecord查询仍然可以正常工作,但有没有人有效地实现这样的事情或使用其他方法?

最后,我想要做的只是检查特定模型是否有ApiCredentials,但我事先无法知道模型是否会实现它。

提前致谢。

1 个答案:

答案 0 :(得分:1)

听起来你在谈论polymorphic association

  

对于多态关联,模型可以属于单个关联上的多个其他模型。例如,您可能拥有属于员工模型或产品模型的图片模型   [...]
  您可以将多态belongs_to声明视为设置任何其他模型可以使用的接口。

这甚至会使用您的model_id / model列,但会将其称为X_idX_type,其中 X 是关联名称:

class CreatePictures < ActiveRecord::Migration
  def change
    create_table :pictures do |t|
      #...
      t.integer :imageable_id
      t.string  :imageable_type
      #...
    end
  end
end

在你的情况下,你会有这样的事情:

class ApiCredential < ActiveRecord::Base
  belongs_to :creditable, :polymorphic => true
end

class Pancake < ActiveRecord::Base
  has_many :api_credentials, :as => :creditable
end

class OneCentStamp < ActiveRecord::Base
  has_many :api_credentials, :as => :creditable
end