Was brauchen Sie zu betrachten ist Polymorphe Verbände
http://guides.rubyonrails.org/association_basics.html#polymorphic-associations
Polymorphe Verbände
Eine etwas fortgeschrittenere Variante Verbänden der polymorphe Vereinigung ist. Bei polymorphen Assoziationen kann ein Modell zu mehr als einem anderen Modell in einer einzigen Assoziation gehören. Sie können beispielsweise ein Bildmodell haben, das entweder einem Mitarbeitermodell oder einem Produktmodell angehört.
class Picture < ActiveRecord::Base
belongs_to :imageable, :polymorphic => true
end
class Employee < ActiveRecord::Base
has_many :pictures, :as => :imageable
end
class Product < ActiveRecord::Base
has_many :pictures, :as => :imageable
end
Sie eine polymorphe belongs_to Erklärung denken können eine Schnittstelle als Einrichtung, die jedes anderes Modell verwenden kann. Von einer Instanz des Employee-Modells können Sie eine Sammlung von Bildern abrufen: @ employee.pictures.
In ähnlicher Weise können Sie @ product.pictures abrufen.
Wenn Sie eine Instanz des Bildmodells haben, können Sie seine Eltern über @ picture.imageable zu bekommen. Um diese Arbeit zu machen, müssen Sie sowohl eine Fremdschlüsselspalte und eine Art Spalte im Modell erklären, dass die polymorphe Schnittstelle deklariert:
class CreatePictures < ActiveRecord::Migration
def change
create_table :pictures do |t|
t.string :name
t.integer :imageable_id
t.string :imageable_type
t.timestamps
end
end
end
Diese Migration kann unter Verwendung der t.references Form vereinfacht werden:
class CreatePictures < ActiveRecord::Migration
def change
create_table :pictures do |t|
t.string :name
t.references :imageable, :polymorphic => true
t.timestamps
end
end
end