【问题标题】:Activeadmin: Collection not working on filterActiveadmin:集合不适用于过滤器
【发布时间】:2021-06-03 06:01:46
【问题描述】:

我正在研究 activeadmin 过滤器。我有一个过滤器不工作。过滤器:

filter :role, as: :select, collection: Common::User::ROLES

作用域集合:

def scoped_collection
  Common::User.where(role: Common::User::ROLES)
end

user.rb 文件中提到了角色:

ROLES = [ ADMIN, CUSTOMER, SYSTEM, LEAD]

但在使用此过滤器时,我收到以下错误:

ActionView::Template::Error (undefined method `klass' for nil:NilClass):
    1: insert_tag renderer_for(:index)

有人知道为什么这个过滤器不起作用吗?

编辑:我注意到带有选项 equals 的选择过滤器不起作用,而带有其他选项(例如 contains、starts_with、ends_with)的相同过滤器正在工作。

【问题讨论】:

  • 角色也是用户的关联吗?
  • 是的,它是一个关联。

标签: ruby-on-rails filter activeadmin


【解决方案1】:

过滤器似乎期待一个 ActiveRecord 关系,因为它是一个关联。

你也许可以在过滤器中使用你在 scoped_collection 中的代码,然后摆脱 scoped_collection?

filter :role, as: :select, collection: Common::User.where(role: Common::User::ROLES)

【讨论】:

  • 在做出建议的更改后,我收到了同样的错误。
【解决方案2】:

太晚了,但你试过把它作为一个过程传递吗?

filter :role, as: :select, collection: proc { Common::User::ROLES }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 2014-03-11
    相关资源
    最近更新 更多