2017-03-24 2 views
3

현재 사용자 개체가 있지만 중복을 피하기 위해 MerchantUser/ProviderUser라는 발표자 개체로 래핑하고 싶습니다. 그러나 ActiveAdmin을 사용하면이 작업을 수행하는 방법이 다소 혼란 스럽습니다. 내가 할, 나는 아직도 그 user.class을보고하고있어 사용자가 아니라 내가 정의한 래퍼 클래스와 동일한 ... 해당 발표자로하지만, 인덱스의 사용자를 변경하는 before_create를 사용하여 시도했습니다.레일스 ActiveAdmin 리소스 오브젝트 수정

scoping_collection을 살펴 보았지만 불행히도 컬렉션에서만 작동하고 개별 개체에서는 작동하지 않습니까?

ActiveAdmin.register User, as: "Companies" do # rubocop:disable Metrics/BlockLength 
    before_create do |user| 
    if user.merchant? 
     user = MerchantUser.new(user) 
    else 
     user = ProviderUser.new(user) 
    end 
    end 

    actions :all, except: [:destroy] 
    permit_params :name, :email, contract_attributes: [:id, :flat_rate, :percentage] 

    filter :role, as: :select 
    index do # rubocop:disable Metrics/BlockLength 
    column :name do |user| 
     user.name <---I want it so I can just do this without the if/else blocks like below. 
    end 
    column :role 
    column :contact_phone 
    column :email 
    column :website do |user| 
     if user.merchant? 
     user.company.website 
     else 
     user.provider.website 
     end 
    end 

    column :flat_rate do |user| 
     money_without_cents_and_with_symbol(user.contract.flat_rate) 
    end 
    column :percentage do |user| 
     number_to_percentage(user.contract.percentage, precision: 0) 
    end 
    actions 
    end 

답변

2

Active Admin의 데코레이터 지원에 대해 살펴 보셨습니까? This page은 매우 포괄적입니다. 구현하는 가장 좋은 방법은 데코레이터/표현 자 객체가 구현되는 방법에 따라 다릅니다.

링크 요약 : 당신이 여기 발표자 필요/하시겠습니까 decorate_with를 사용하거나 PORO 지원

0

에 대한 this gem를 사용하여 들여다? 다른 이름과 사용자 정의 (필터, 색인 페이지, 양식 등)를 가진 ActiveAdmin 자원과 동일한 레일스 모델을 여러 번 등록 할 수 있습니다. Rails STI를 사용하거나 다른 레일스 default_scope를 사용하여 레일즈 모델을 서브 클래스화한 다음 서브 클래스를 등록 할 수도 있습니다.