Я пытаюсь использовать функцию get_raw_records
в Datatables, получая доступ к записям, которые принадлежат вложенному атрибуту. Проблема в том, что каждый раз, когда я использую функцию поиска, get_raw_records
вызывается снова, и это занимает очень много времени из-за количества записей, через которые он проходит.
Вот пример того, как выглядит моя ситуация:
# models/book.rb
class Book < ApplicationRecord
belongs_to organization
has_many :chapters
end
.
# models/chapter.rb
class Chapter < ApplicationRecord
belongs_to :chapter
has_many :sections
end
.
# models/section.rb
class Section < ApplicationRecord
belongs_to :chapter
has_many :paragraphs
end
.
# models/paragraph.rb
class Paragraph < ApplicationRecord
belongs_to :section
end
Это именно та иерархия, которая есть в моем коде, за исключением книг и т. Д. Однако в моей таблице данных я пытаюсь получить все абзацы, принадлежащие Книге. Вот как это выглядит в настоящее время:
# datatables/book_datatable.rb
...
def get_raw_records
book = Book.find(params[:book_id])
paragraph_ids = Book.paragraphs.pluck(:id)
Paragraph.where(id: paragraph_ids)
end
А вот как выглядит моя Book
модель:
# models/book.rb
class Book < ApplicationRecord
has_many :chapters, dependent: :destroy
has_many :sections, through: :chapters
has_many :paragraphs, through: sections
end
Мне кажется, что это чрезвычайно сложный вложенный подход, который можно сделать намного проще. Кроме того, необходимость звонить get_raw_records
каждый раз, когда я набираю букву в данных, приводит к длительным задержкам.
Есть ли лучший способ, которым я могу оптимизировать это, чтобы я мог достичь своей цели, используя вложенные модели в моей таблице данных, не занимая так много времени?