2

考虑一个资源:任务,它启用了评论。

我想获得任务的所有评论

t=Task.find(5)

t.comments 产生错误。

获得收藏的正确方法是什么?

4

5 回答 5

2

结合以上两个答案,对我有用的是将其插入包含评论的模型中(无需为评论创建新模型):

has_many :active_admin_comments, as: :resource, class_name: 'ActiveAdmin::Comment'
alias_method :comments, :active_admin_comments
于 2016-05-24T21:53:44.630 回答
2
comments = ActiveAdmin::Comment.find_for_resource_in_namespace task, 'admin' # or your namespace

来自: https ://github.com/activeadmin/activeadmin/blob/d01155f73a0e2cc27d712792270357e2b3759d05/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb#L15

于 2017-04-20T20:21:46.107 回答
1

@powers 的回答效果很好,无需注册ActiveAdminComment为新模型。

为了进一步简化,您可以创建 has many 关系并comments在一行中调用它(不需要别名):

has_many :comments, class_name: 'ActiveAdmin::Comment', as: :resource

然后您应该能够使用 访问评论task.comments

于 2020-04-10T15:10:19.213 回答
0

ActiveAdmin 创建一个名为“active_admin_comments”的评论表。此表可用于创建 rails 模型,您可以从中创建多态关联。

# app/models/active_admin_comment.rb
class ActiveAdminComment < ActiveRecord::Base
  belongs_to :resource, polymorphic: true
end

# app/models/task.rb
class Task < ActiveRecord::Base
  has_many :active_admin_comments, as: :resource
end

然后你可以做task.active_admin_comments。如果你想使用 task.comments,你可以创建一个 alias_method 如下:

# app/models/task.rb
class Task < ActiveRecord::Base
  has_many :active_admin_comments, as: :resource
  alias_method :comments, :active_admin_comments
end
于 2013-09-01T00:12:14.870 回答
0

ActiveAdmin 已经为此提供了一个 ActiveRecord 类。它在这里定义:https ://github.com/activeadmin/activeadmin/blob/master/lib/active_admin/orm/active_record/comments/comment.rb

它是ActiveAdmin::Comment

因此,您可以执行以下操作:

task = Task.last # For example comments = ActiveAdmin::Comment.where(resource: task)

于 2015-11-26T11:17:59.657 回答