RailsAdmin - 将参数传递给作用域

时间:2016-01-13 00:22:45

标签: ruby-on-rails ruby-on-rails-4 rails-admin

我在我的模型上定义了几个范围,并在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

2 个答案:

答案 0 :(得分:2)

我通过创建自定义操作解决了这个问题,然后将其指定为使用索引模板。它显示在List,Add New和其他操作旁边,而不是下面的过滤器。

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

相关问题Rails_admin custom action specify template name

答案 1 :(得分:0)

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

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