如何在活动管理员中获取请求uri

时间:2012-09-28 19:08:54

标签: ruby-on-rails ruby activeadmin

我有多态模型:

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. 

先谢谢你。

3 个答案:

答案 0 :(得分:2)

如果您希望为多态嵌套资源(products/picturesservices/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使用这些路线。

来源:https://github.com/gregbell/active_admin/issues/1183

答案 1 :(得分:1)

从模型内部请求uri是针对MVC设计的。您的方法应该在您的应用程序控制器中。当您想要注册图片时,您当前的控制器应该告诉模型它是什么。

答案 2 :(得分:0)

您可以使用#imageable_type找出父模型。

例如:

Image.find(1).imageable_type # => "Product"