簡體   English   中英

ActiveAdmin 如何裝飾關聯的鏈接

[英]ActiveAdmin how to Decorate associated links

在 ActiveAdmin 中,我知道我可以使用裝飾器(例如 Draper)來提供display_namename ,但是如何將裝飾器用於簡單的關聯鏈接(即auto_link(resource) )?

鑒於我有一個帖子和評論:

# Post.rb
class Post
  has_many :comments
end

# Comment.rb
class Comment
  belongs_to :post
end
# decorators/post_decorators.rb
class PostDecorator
  def name
    "Custom Post Name ##{object.id}"
  end
end
# admin/post.rb
ActiveAdmin.register Post do
  delegate_with PostDecorator
end

# admin/comments.rb
ActiveAdmin.register Comment do
  index do
    # ...
    column :post
    # ...
  end

  show do
    default_main_content
  end
end

查看評論 ActiveAdmin 區域時,節目的default_main_content和索引的column:post都自動鏈接到 Post object,但從不使用裝飾器。

我將看到:在這些部分中Post #4而不是Custom Post Name #4

當我訪問 Post 管理區域時,它將完美地使用修飾名稱。

如何在整個管理區域中獲得使用 Draper 的自動鏈接?

我目前在 object 本身上有一個def name ,但這是一個顯示屬性,想將其移動到裝飾器。

如果你使用的是Draper ,你可以使用decorates_association來告訴一個裝飾器來裝飾它的關聯。 這要求您有一個CommentDecorator

class CommentDecorator < Draper::Decorator
  delegate_all
  decorates_association :post
end

ActiveAdmin.register Comment do
  decorate_with CommentDecorator

  ...
end

@nitsujri 您可以編寫一個 draper 關注點,您可以將其包含在您的所有裝飾器中,這些裝飾器在功能上為您處理所有關聯。 和你一樣,我也厭倦了自己管理協會——這意味着在另一個地方跟蹤協會。

這是一個簡單的問題,它依賴於使用 activerecord 反射從現有的 object 中提取所有名稱並將它們扔給 drapers decorates_associations方法。

module AutoDecorateAssociations
  extend ActiveSupport::Concern

  included do
    delegate :class, to: :object, prefix: true
    decorates_associations *(object_class.reflect_on_all_associations.map(&:name) - [:versions])
  end
end

然后只在你不想跟蹤的裝飾器上include AutoDecorateAssociations (不幸的是你不能把它扔到你的 application_decorator 中)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM