Противоположное направление полиморфных c ассоциативных рельсов - PullRequest
2 голосов
/ 07 марта 2020

В моем приложении есть пример, где я могу назначить / получить доступ к ассоциации polymorphi c, но я не могу получить доступ к классу обратно из ассоциации polymorphi c,

class EmailCampaignSubscription < ActiveRecord::Base
  belongs_to :subscribable, polymorphic: true
end

class Order < ActiveRecord::Base
  has_one :email_campaign_subscription, as: :subscribable
end

Это работает EmailCampaignSubscription.last.subscribable, но это не Order.last. email_campaign_subscription. Также это не работает:

EmailCampaignSubscription.last.subscribable.email_campaign_subscription

By не работает, я имею в виду, что он возвращает nil.

Это работает (возвращает правильную запись):

EmailCampaignSubscription.where(subscribable_type: "Order", subscribable_id: Order.last.id)

Я использую rails 4.2.11, почему этот метод доступа обратно к email_campaign_subscription не работает и как я могу исправить определение ассоциации, чтобы оно работало?

Обновление:

Я пробовал это:

has_one :email_campaign_subscription, class_name: 'EmailCampaignSubscription', as: :subscribable

Все еще получил nil.

1 Ответ

0 голосов
/ 07 марта 2020

Вам нужно передать опцию class_name с полиморфом c has_one

has_one :email_campaign_subscription, class_name: 'EmailCampaignSubscription', 
                                      as: :subscribable

Попробуйте.

...