Полиморфная ассоциация не работает с ActiveHash - PullRequest
1 голос
/ 08 апреля 2019

У меня есть класс 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 Ответ

1 голос
/ 08 апреля 2019

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

**

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

**

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

см. Док .: https://www.rubydoc.info/gems/honkster-active_hash/0.7.3

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

has_many :people, as: :placeable

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

belongs_to :placeable, polymorphic: true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...