考虑一个资源:任务,它启用了评论。
我想获得任务的所有评论
t=Task.find(5)
t.comments 产生错误。
获得收藏的正确方法是什么?
考虑一个资源:任务,它启用了评论。
我想获得任务的所有评论
t=Task.find(5)
t.comments 产生错误。
获得收藏的正确方法是什么?
结合以上两个答案,对我有用的是将其插入包含评论的模型中(无需为评论创建新模型):
has_many :active_admin_comments, as: :resource, class_name: 'ActiveAdmin::Comment'
alias_method :comments, :active_admin_comments
comments = ActiveAdmin::Comment.find_for_resource_in_namespace task, 'admin' # or your namespace
@powers 的回答效果很好,无需注册ActiveAdminComment
为新模型。
为了进一步简化,您可以创建 has many 关系并comments
在一行中调用它(不需要别名):
has_many :comments, class_name: 'ActiveAdmin::Comment', as: :resource
然后您应该能够使用 访问评论task.comments
。
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
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)