Получить все связанные записи после фильтрации

#ruby-on-rails #rails-admin

Вопрос:

Я натыкаюсь на стену с фильтрами.

У меня есть две модели и относительный rails_admin conf:

 class ImageBase < ApplicationRecord
  has_and_belongs_to_many :authors, optional: true
  [...]
end

class Author < ApplicationRecord
  has_and_belongs_to_many :image_bases, class_name: 'ImageBase'
  [...]
end

config.model 'ImageBase' do
    list do
      scopes [:published, :draft, nil]
      filters %i[collocazione authors]
      [...]
      field :authors do # (4)
        eager_load true
        queryable true
        visible true
        searchable %i[name surname]
      end
      search_by :search_image_base_admin
    end
end
 

Моя проблема в том, что когда я фильтрую базу изображений по авторам в Rails_admin, в результатах отображается только соответствующий автор, а не все авторы, связанные с записью базы изображений.

Мне это нужно в основном для экспорта данных после фильтрации, это не просто проблема в представлении списка (я могу с этим смириться).

Не можете найти решение ни в документах, ни в сети, никаких предложений/решений?

Спасибо, Франческо

Комментарии:

1. Я не понимаю вашего вопроса, когда вы говорите «к записи базы изображений», какую запись вы имеете в виду? вы настраиваете список базовых записей изображений, поэтому при фильтрации по одному субъекту вы получите только базовую запись изображения, связанную с этим конкретным субъектом. Не могли бы вы переформулировать свой вопрос?

2. Я имею в виду следующее: когда я фильтрую базу изображений (мою основную таблицу) по автору (отношение m2m) в rails_admin, результаты показывают мне только того же Автора, которого я отфильтровал в результатах базы изображений, а не всех Авторов, связанных с записями. Пример: ImageBaseRecord1 <идентификатор:23,Авторы:[Пикассо,Брессон]>, когда я фильтрую по «Пикассо», я получаю в ImageBaseRecord1 только «Пикассо»

3. Если вы находитесь в представлении списка базы изображений администратора rails и ищете записи, связанные с Picasso(через авторов m2m), вы получите это, почему вы ожидаете, что также получите записи, связанные с Брессоном? Извините, я все еще не понимаю ваших ожиданий.

4. потому что, если с записью базы изображений связаны два автора, мне нужно видеть обоих, а не только того, для которого я отфильтровал… в противном случае я получу неверные данные при экспорте результатов!

5. Извините, я не могу вам помочь, для меня не имеет смысла то, о чем вы просите.

Ответ №1:

Я не уверен, что понял, но вы всегда можете переопределить встроенный поиск и создать свой собственный с областью действия, как это

   RailsAdmin.config do |config|
    config.model ImageBase do
      list do
        search_by :custom_search
      end
    end
  end

scope :custom_search, ->(query) { where(name: query.reverse) }
 

Комментарии:

1. Спасибо, но моя проблема в разделе фильтров, а не в поиске как таковом. Фильтры обрабатываются перед областью действия rails_admin.

2. Вы всегда можете сделать unscope.where(что-то), но вы тоже потеряете нумерацию страниц