active_record-acts_as icon indicating copy to clipboard operation
active_record-acts_as copied to clipboard

accessing #acting_as through association returns the wrong actable

Open risen opened this issue 9 years ago • 2 comments

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?

risen avatar Nov 05 '15 11:11 risen

See also: https://gist.github.com/risen/b5a76d0929379303af30

risen avatar Nov 05 '15 11:11 risen

Why there should be such a circular dependency in model?

hzamani avatar Jan 24 '16 03:01 hzamani