リソースを考えてみましょう: コメントが有効になっているタスク。
タスクのすべてのコメントを取得したい
t=Task.find(5)
t.comments はエラーになります。
コレクションを取得する正しい方法は何ですか?
リソースを考えてみましょう: コメントが有効になっているタスク。
タスクのすべてのコメントを取得したい
t=Task.find(5)
t.comments はエラーになります。
コレクションを取得する正しい方法は何ですか?
上記の2つの答えを組み合わせて、私にとってうまくいったのは、コメントを含むモデルにこれを挿入することでした(コメント用に新しいモデルを作成する必要はありません):
has_many :active_admin_comments, as: :resource, class_name: 'ActiveAdmin::Comment'
alias_method :comments, :active_admin_comments
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)
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