wioux/paranoia — pull request #1 by PatKoperwas (2014-12-04 00:48:04+00:00)
Title: Fix 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 `:as` option.

To fix,

If association 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).

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