ruby-on-rails-4 - 使用评论员 gem 时解决具有现有订阅模型的应用程序
问题描述
我正在使用commontator gem来实现评论功能。但是有一个问题,因为这个 gem 也使用订阅模型,我们的 gem 也使用订阅模型。所以有一个thread_id列与commontator的订阅表相关联。但是当它正在访问我们的订阅模型时......它给出了一个错误PG::UndefinedColumn: ERROR: column subscriptions.thread_id does not exist
对于实际上给出错误并具有关联的线程模型has_many: subscriptions
......我添加了class_name,如下所示
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>
有什么方法可以在不更改订阅模型名称的情况下处理这个问题?
解决方案
@vaishnavi,commontator rails 引擎要求您添加acts_as_commontator
到应该允许评论的模型中。
在大多数明显包含User
模型的 Rails 应用程序中
这是修复问题所需更改的PR 。
gem 'commontator', git: "git@github.com:pikender/commontator.git", branch: "fixes/issue-135"
如果它为您解决了问题,请尝试Gemfile
通过测试和确认来帮助他人。
希望这可以解决您的问题并快乐编码:)
在此处添加更改差异以供将来参考,以防上述 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
推荐阅读
- attributeerror - 在 Pycharm 上安装 Behave
- python - 在python中显示正常数字
- flutter - 使用提供程序在 null 上调用了颤振添加方法
- mongodb - Mongoose:如何批量查询模型的数组类型字段
- javascript - 在日历显示时自动设置开始日期并启用结束日期的日期选择(daterangepicker)
- xamarin.forms - xamarin.forms 找出设置为 imagesource 的图片
- javascript - API 无响应
- ios - 跨 iOS 版本填充数据时,数据构造函数具有不同的语义
- python - 如何使用 pip3 而不是 pip2
- r - 将绘图导出到具有预定义大小的磁盘,R