我有一个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
似乎可以正常工作。
答案 0 :(得分:1)
请参阅文档:https://github.com/zilkey/active_hash/issues/151
**
ActiveHash不支持 arel 行为。
**
Arel 是Ruby的SQL AST(类似于抽象语法树)管理器。它使我们能够以语义,可重用的方式编写复杂的SQL查询。 Arel是“框架框架”;它旨在通过数据库兼容性优化对象和集合建模。 活动记录基于Arel构建。。
请参阅文档:https://www.rubydoc.info/gems/honkster-active_hash/0.7.3
即使在此官方文档中,它也没有像这样解释任何地方:
has_many :people, as: :placeable
只需解释
belongs_to :placeable, polymorphic: true