【问题标题】:How to override index in ActiveAdmin without has_many relationshisp如何在没有 has_many 关系的情况下覆盖 ActiveAdmin 中的索引
【发布时间】:2015-09-29 06:18:50
【问题描述】:

我的模型 User 和 Request 之间存在解耦关系。 IE。 requests 表中没有 user_id 字段。我有一个查找器来找出用户可以看到的与默认 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"...

所以我想我应该重写请求控制器中的 index 方法:

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'

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

【问题讨论】:

    标签: ruby-on-rails ruby activeadmin


    【解决方案1】:

    所以按照往常一样,我在发布#facepalm 后立即弄清楚。

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

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

    【讨论】:

      猜你喜欢
      • 2021-06-11
      • 2019-06-29
      • 2023-04-06
      • 1970-01-01
      • 2015-12-21
      • 2012-12-14
      • 2012-08-21
      • 2014-01-20
      • 1970-01-01
      相关资源
      最近更新 更多