#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