luckyframework/avram

Sub-associations from polymorphic types don't work

開放

#1,036 建立於 2024年5月8日

 (0 則留言) (0 個反應) (0 位負責人)Crystal (67 個分叉)auto 404
bughacktoberfest

倉庫指標

星標
 (180 顆星)
PR 合併指標
 (PR 指標待抓取)

描述

It appears we never actually test using polymorphic associations. If you try and call a method on them, you'll get a compile time error because Crystal can't determine the true shape of the object.

table do
  belongs_to user : User
  belongs_to car : Car?
  belongs_to computer : Computer?
  polymorphic purchasable, associations: [:car, :computer]
end

purchase = PurchaseQuery.new.preload_purchasable.user_id(current_user.id).first

# We currently test that this works, and it does...
purchase.purchasable

# This however does not work
purchase.purchasable.owner!
# => Error: undefined method 'owner!' for User (compile-time type is BaseModel+)

In order to do this, you have to cast it to the proper type. purchase.purchasable.as(Car).owner!, but the whole point of the polymorphic association is that it could be any number of types so that gets a bit tricky

貢獻者指南