active_record-acts_as
active_record-acts_as copied to clipboard
accessing #acting_as through association returns the wrong actable
There seems to be a problem if you have a circular dependency in your actable base class.
Example:
class Product < ActiveRecord::Base
actable
belongs_to :pen_case
end
class Pen < ActiveRecord::Base
acts_as :product
end
class PenCase < ActiveRecord::Base
acts_as :product
has_many :products
end
As you can see Product has a reference pen_case_id to PenCase, which again, is a Product.
Now, this happens:
>> PenCase.first.products
+----+------------+--------------+-------------+--------+-------+
| id | actable_id | actable_type | pen_case_id | name | price |
+----+------------+--------------+-------------+--------+-------+
| 1 | 1 | Pen | 1 | Penie! | 0.8 |
+----+------------+--------------+-------------+--------+-------+
1 row in set
>> Pen.first.product.id
=> 1
>> PenCase.first.product.id
=> 2
>> Pen.first.pen_case.product.id
=> 1
As you can see accessing #product (or #acting_as) gives the wrong result if we go through the Product#pen_case association. Weird?
See also: https://gist.github.com/risen/b5a76d0929379303af30
Why there should be such a circular dependency in model?