Rails - Belongs_to Model, где Model может быть любая модель, реализующая отношения? - PullRequest
0 голосов
/ 04 марта 2012

Возможно ли реализовать в Rails 3 ассоциацию

class ApiCredentials < ActiveRecord::Base
  belongs_to Model

end

, где Model может быть любой моделью.

Затем в таблице api_credentials есть поля типа model_id и model для отслеживания этой связи.

Я не предполагаю, что удобные стандартные запросы ActiveRecord по-прежнему будут работать, но кто-нибудь реализовал что-то подобное эффективно или использовал другой метод?

В конце концов, все, что я хочу сделать, этоеще нужно проверить, есть ли у конкретной модели ApiCredentials, но я не могу заранее знать, будет ли модель реализовывать ее.

Заранее спасибо.

1 Ответ

1 голос
/ 04 марта 2012

Похоже, вы говорите о полиморфной ассоциации :

При полиморфных ассоциациях модель может принадлежать нескольким другим моделям в одной ассоциации. Например, у вас может быть модель изображения, которая относится либо к модели сотрудника, либо к модели продукта.
[...]
Вы можете думать о полиморфном объявлении belongs_to как о настройке интерфейса, который может использовать любая другая модель.

Он даже использует ваши model_id / model столбцы, но называет их X_id и X_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
...