radar/paranoia — pull request #189 by PatKoperwas (2014-12-04 01:22:27+00:00)
Title: Fix restore with polymorphic has_one relationships

Restoring polymorphic `has_one` relationships errored because paranoia was
not correctly looking up the foreign_key.

Output from failing test -
```
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: parent_model_id: SELECT "polymorphic_models".* FROM "polymorphic_models" WHERE ("polymorphic_models"."deleted_at" IS NOT NULL) AND (parent_model_id) ORDER BY "polymorphic_models"."id" ASC LIMIT 1
```

The test sets up a `PolymorphicModel`, which `has_many :parents`. The
`ParentModel` then has a `has_one` relationship with `PolymorphicModel`. When
restoring, the foreign key is set as - `self.class.name.to_s.underscore_id`
which will be `parent_model_id`, instead of the correct `:as` option.

To fix:

If the association object is a `has_one` relationship with an `:as` option,
it will have a `type` attribute (see
https://github.com/rails/docrails/blob/master/activerecord/lib/active_record/reflection.rb#L280).

If this `type` attributes is present, it will be the type column on the
polymorphic model. The foreign key can be found as an attribute on
the association object.

This should fix #174. Solution is based off of @hamidumi 's suggestions.