Полиморфная ассоциация не работает с ActiveHash

#ruby-on-rails #ruby #activerecord

#ruby-on-rails #ruby #activerecord

Вопрос:

У меня есть класс ActiveHash, который я хотел бы использовать в полиморфной ассоциации:

 class Person < ActiveRecord::Base
  extend ActiveHash::Associations::ActiveRecordExtensions

  belongs_to :placeable, polymorphic: true
end

class Country < ActiveHash::Base
  include ActiveHash::Associations

  has_many :people, as: :placeable

  self.data = [
    { id: 1, name: 'US' },
    { id: 2, name: 'Canada' }
  ]
end

  

При настройке полиморфной ассоциации она сохраняется в базе данных, устанавливающей полиморфный тип на ActiveHash::Base . При последующем доступе к нему я получаю undefined method 'arel_table' ошибку.

 person = Person.create
person.placeable = Country.last
person.save
person
=> #<Person id: 1, placeable_id: 2, placeable_type: "ActiveHash::Base">

person.placeable
NoMethodError: undefined method `arel_table' for ActiveHash::Base:Class
    from (irb):2
  

Я также попытался установить полиморфный тип на Country , но я получаю ту же ошибку для класса Country.

Неполиморфный belongs_to , похоже, работает нормально.

Комментарии:

1. Вы уверены, что это вообще поддерживается этим драгоценным камнем ActiveHash? Звучит так, как будто это просто не так.

Ответ №1:

Смотрите документ:https://github.com/zilkey/active_hash/issues/151

**

ActiveHash не поддерживает поведение arel.

**

Arel — это SQL AST (абстрактный синтаксический древовидный) менеджер для Ruby. Это позволяет нам писать сложные SQL-запросы семантическим способом многократного использования. Arel — это «framework framework»; он предназначен для оптимизации моделирования объектов и коллекций по сравнению с совместимостью с базой данных. Активная запись создается поверх Arel.

смотрите документ:https://www.rubydoc.info/gems/honkster-active_hash/0.7.3

Даже в этом официальном документе нигде не объясняется подобное:

 has_many :people, as: :placeable
  

Просто объясните

 belongs_to :placeable, polymorphic: true