RailsAdmin - 将参数传递给范围

RailsAdmin - pass parameters to scopes

我在我的模型上定义了几个范围并在 rails_admin 中使用它们。

scope :foo , ->() { where(status: 'active')}
...
list do
  scopes    [nil, 'foo']

我想创建可以传递参数的范围,然后从 rails_admin 加载这些参数。像这样:

scope :bar , ->(query) { where(status: query)}

但是因为 RA 没有传递参数我一直在获取

wrong number of arguments (0 for 1)

有人有什么建议吗?我正在使用 Rails 4.1.14 与 rails_admin 0.8.1 和 mongoid 5.0

我通过创建自定义操作解决了这个问题,然后指定它使用索引模板。它显示在列表、添加新项和其他操作旁边,而不是在过滤器下方。

class Article
  include Mongoid::Document
  field :title, type: String
  ...
  belongs_to :user,     counter_cache: true
  scope :by_user, ->(user) { where(user: user) } 
  ...
end
# in rails_admin.rb
class Myarticles < RailsAdmin::Config::Actions::Base
  RailsAdmin::Config::Actions.register(self)
  register_instance_option :collection do
    true
  end
  register_instance_option :only do
    Article
  end        
  register_instance_option :controller do
    proc do
      @objects = Article.by_user(current_user)
      render :index
    end
  end
end

相关问题

另一种方法是使用康康舞。您可以在能力文件中执行此操作:

  def initialize(user)
      can [:read], Profile, user_id: user.id
  end