![](/img/trans.png)
[英]How to create associated object by link click in Activeadmin index page?
[英]ActiveAdmin how to Decorate associated links
在 ActiveAdmin 中,我知道我可以使用裝飾器(例如 Draper)來提供display_name
和name
,但是如何將裝飾器用於簡單的關聯鏈接(即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.