如何在没有has_many relationshisp的情况下覆盖ActiveAdmin中的索引

时间:2015-09-28 21:56:34

标签: ruby-on-rails ruby activeadmin

我的模型User和Request之间存在关系。 I.E. user_id表中没有requests字段。我有一个查找程序可以确定用户可以看到的请求与默认的ActiveAdmin调用

不同
requests where user_id = x

我曾经假设如果我的User类中有一个名为requests的方法调用了这个查找程序,那么ActiveAdmin就可以解决它,但它并没有。所以这里有一些代码。我之前认为这可以用来获取用户的请求:

class User
...
  def requests
    RequestFinder.new(self).find
  end

...
end

然后我收到了这个错误:

PG::UndefinedColumn: ERROR:  column requests.user_id does not exist
LINE 1: ...T  1 AS count_column FROM "requests" WHERE "requests"...

所以我想我应该覆盖请求控制器中的索引方法:

def index
  @requests = RequestFinder.new(current_user).find.page(params[:page]).per(20)
end

但后来我收到以下错误:

First argument in form cannot contain nil or be empty
vendor/bundle/ruby/2.2.0/gems/actionview-4.2.4/lib/action_view/helpers/form_helper.rb:432:in `form_for'

我不确定如何重新格式化我的请求控制器,以便从查找器而不是用户呈现请求。

1 个答案:

答案 0 :(得分:1)

所以我按照惯例在发布#facepalm之后立即解决。

如果要将任何通用ActiveRecord :: Relation传递给活动管理员索引,只需覆盖scoped_collection方法,确保添加分页,如下所示:

controller do 
  def scoped_collection
    RequestFinder.new(current_user).find.page(params[:page]).per(20)
  end
end