STI e Polymorphic associations
Maio 03, 2008 @ 02:00 PM

Essa semana me deparei com um problema: meus modelos que herdavam do modelo User, faziam parte de uma associação polimórfica, onde cada tipo distinto de usuário, poderia ter um vepiculo. Esse problema é documentado no manual, e para utilizar
O meu problema era, que ao chamar current_user.vehicles.find ele pesquisava por veículos com owner_type igual a User.
Quando utilizo associações polimórficas, eu preciso de dois campos para isso, o campo que armazena o código, id, e o campo que armazena o tipo, type. Como minha associação se chama owner, meu modelo possui dois campos owner_id e owner_type.
Mas na hora do meu cadastro, o tipo armazenado no veículo era Manager, que é um modelo User.
Para o uso de associações polimórficas com Vehicle para que ele armazene a classe base do objeto que estiver sendo fornecido como owner, como está no código abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class Vechile < ActiveRecord::Base belongs_to :owner, :polymorphic => true def owner_type=(sType) super(sType.to_s.classify.constantize.base_class.to_s) end end class User < ActiveRecord::Base has_many :vehicles, :as => :owner, :dependent => :destroy end class Manager < User end class Administrator < User end |



Desculpe, os comentários para esse artigo estão fechados devido ao número de SPAMs que tenho recebido.