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