Обойти для приложений с существующей моделью подписки при использовании гема комментатора - PullRequest
0 голосов
/ 22 апреля 2019

Я использую гем commontator для реализации функции комментариев. Но есть проблема, поскольку этот драгоценный камень также использует модель подписки, а наш драгоценный камень также использует модель подписки. Таким образом, есть столбец thread_id, связанный с таблицей подписки пользователя. Но когда он обращается к нашей модели подписки .... Это дает ошибку PG::UndefinedColumn: ERROR: column subscriptions.thread_id does not exist

К модели потока, которая фактически дает ошибку и которая имеет ассоциацию has_many: subscriptions ... Я добавил имя_класса следующим образом

module Commontator
class Thread < ActiveRecord::Base
belongs_to :closer, polymorphic: true, optional: true
belongs_to :commontable, polymorphic: true, optional: true
has_many :comments, dependent: :destroy
has_many :subscriptions, class_name: "Commontator::Subscription", dependent: :destroy

Но это также все еще возвращает мою модель подписки:

pry(#<Commontator::Thread>)> subscriber.subscriptions
=> [#<Subscription:0x00007fabcc5d3340
  id: 1,
  kind: "free",
  end_date: nil,
  user_id: 2,
  channel_id: 1,
  created_at: Thu, 04 Apr 2019 11:21:15 UTC +00:00,
  updated_at: Thu, 04 Apr 2019 11:21:15 UTC +00:00>]

Мой user.rb включает has_many :subscriptions, dependent: :destroy

Модель подписки Commontator против модели my_subscription

irb(main):017:0> Commontator::Subscription.new
=> #<Commontator::Subscription id: nil, subscriber_type: nil, subscriber_id: nil, thread_id: nil, created_at: nil, updated_at: nil>
irb(main):018:0> Subscription.new
=> #<Subscription id: nil, kind: "free", end_date: nil, user_id: nil, channel_id: nil, created_at: nil, updated_at: nil>

Есть ли способ, которым я могу изменить это, не меняя название моей модели подписки ??

1 Ответ

0 голосов
/ 18 мая 2019

@ vaishnavi, commontator Двигатель рельсов требует, чтобы вы добавили acts_as_commontator к модели, которую следует прокомментировать.

В большинстве приложений рельсов, которые, очевидно, включают User модель

Вот PR , в котором есть изменения, необходимые для решения проблемы.

Пожалуйста, попробуйте с gem 'commontator', git: "git@github.com:pikender/commontator.git", branch: "fixes/issue-135" в вашем Gemfile и помогите другим, протестировав и подтвердив, если это решит проблему для вас.

Надеясь, что это исправит вашу проблему и удачное кодирование:)


Добавление изменений diff здесь для дальнейшего использования, в случае, если вышеуказанный PR удален или потерян

Требуемое изменение просто изменить subscriptions ассоциацию на commontator_subscriptions и изменить ее ссылки, которых всего два (чувствуя себя счастливым :))

diff --git a/app/models/commontator/thread.rb b/app/models/commontator/thread.rb
index 83e51e3..b410b23 100644
--- a/app/models/commontator/thread.rb
+++ b/app/models/commontator/thread.rb
@@ -91,7 +91,7 @@ module Commontator

     def subscription_for(subscriber)
       return nil if !subscriber || !subscriber.is_commontator
-      subscriber.subscriptions.where(thread_id: self.id).first
+      subscriber.commontator_subscriptions.where(thread_id: self.id).first
     end

     def subscribe(subscriber)
diff --git a/lib/commontator/acts_as_commontator.rb b/lib/commontator/acts_as_commontator.rb
index 1497ebb..2fe11a6 100644
--- a/lib/commontator/acts_as_commontator.rb
+++ b/lib/commontator/acts_as_commontator.rb
@@ -17,12 +17,12 @@ module Commontator

           has_many :comments,      as: :creator,
                                    class_name: 'Commontator::Comment'
-          has_many :subscriptions, as: :subscriber,
+          has_many :commontator_subscriptions, as: :subscriber,
                                    class_name: 'Commontator::Subscription',
                                    dependent: :destroy
         end
       end
diff --git a/spec/lib/commontator/acts_as_commontator_spec.rb b/spec/lib/commontator/acts_as_commontator_spec.rb
index 11a9cda..cade863 100644
--- a/spec/lib/commontator/acts_as_commontator_spec.rb
+++ b/spec/lib/commontator/acts_as_commontator_spec.rb
@@ -17,7 +17,7 @@ module Commontator
     it 'must modify models that act_as_commontator' do
       user = DummyUser.create
       expect(user).to respond_to(:comments)
-      expect(user).to respond_to(:subscriptions)
+      expect(user).to respond_to(:commontator_subscriptions)
       expect(user).to respond_to(:commontator_config)
       expect(user.commontator_config).to be_a(CommontatorConfig)
     end
...