我有多态模型:
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.
先谢谢你。
答案 0 :(得分:2)
如果您希望为多态嵌套资源(products/pictures
和services/pictures
)提供CRUD,则您的应用程序需要包含/admin/products/:id/images
和/admin/services/:id/images
等路由。问题是,当您在belongs_to :parent
块中使用register
时,active_admin将只生成一个嵌套路由admin/parents/:id/child
,而您需要两个。{1}}此外,当前网址无法确定:parent
,因为调用belongs_to :parent
本身用于创建当前网址(资源路径)。
要解决此问题,您可以在configs.rb
中自行定义路线namespace :admin do
resources :services do
resources :pictures
end
resources :products do
resources :pictures
end
end
并通过在controller.belongs_to :service, :product, polymorphic: true
register
块中Picture
写{{1}}告诉active_admin使用这些路线。
答案 1 :(得分:1)
从模型内部请求uri是针对MVC设计的。您的方法应该在您的应用程序控制器中。当您想要注册图片时,您当前的控制器应该告诉模型它是什么。
答案 2 :(得分:0)
您可以使用#imageable_type
找出父模型。
例如:
Image.find(1).imageable_type # => "Product"