RailsAdmin - передавать параметры в области

Я определил несколько областей на моей модели и использую их в 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 ответа

Решение

Я решил это путем создания настраиваемого действия и затем указал его для использования шаблона индекса. Он отображается рядом со списком, Добавить новый и другие действия вместо фильтров ниже.

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 указывает имя шаблона

Другой способ - использовать канкан. Вы можете сделать это в файле способностей:

  def initialize(user)
      can [:read], Profile, user_id: user.id
  end
Другие вопросы по тегам