2

私はポリモーフィックモデルを持っています:

class Picture < ActiveRecord::Base
  belongs_to :imageable, :polymorphic => true  
end

class Service < ActiveRecord::Base
  has_many :pictures, :as => :imageable
end

class Product < ActiveRecord::Base
  has_many :pictures, :as => :imageable
end

activeadminモデルを両方の親(サービスと製品)で機能させるには、次のようなことを行う必要があります。

ActiveAdmin.register Picture do
  def who_do_i_belong_to?
    uri = how_to_get_uri?
    if uri.match(/products/) 
      :product
    else
      :service
    end
  end

  belongs_to  who_do_i_belong_to?
end

回避策は機能しているようです。who_do_i_belong_to内からurl/uriを取得する方法が恋しいだけですか?方法。

controller.controller_name # "admin/services", so it is not useful. 

よろしくお願いします。

4

3 に答える 3

2

products/pictures多態的なネストされたリソース(および)にCRUDを使用する場合、アプリケーションにはおよびservices/picturesのようなルートが必要です。問題は、ブロックで使用する場合、active_adminはネストされたルートを1つしか生成しないのに対し、2つ必要なことです。さらに、呼び出し自体が現在のURL(リソースパス)を作成するために使用されるため、現在のURLで判別することはできません。/admin/products/:id/images/admin/services/:id/imagesbelongs_to :parentregisteradmin/parents/:id/child:parentbelongs_to :parent

これを回避するには、configs.rbで自分でルートを定義できます。

namespace :admin do
  resources :services do
    resources :pictures
  end

  resources :products do
    resources :pictures
  end
end

のブロックに書き込むことにより、active_adminにこれらのルートを使用するように指示controller.belongs_to :service, :product, polymorphic: trueします。registerPicture

ソース:https ://github.com/gregbell/active_admin/issues/1183

于 2012-10-03T05:14:07.633 に答える
1

モデル内からURIを要求することは、MVC設計に反します。メソッドはアプリケーションコントローラーにある必要があります。また、画像を登録する場合は、現在のコントローラーがモデルに画像を通知する必要があります。

于 2012-10-02T21:37:25.877 に答える
0

#imageable_type親モデルがどれであるかを確認するために使用できます。

例えば:

Image.find(1).imageable_type # => "Product"
于 2012-10-02T21:47:45.980 に答える