Более быстрый способ использовать датируемые и вложенные модели? - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь использовать функцию 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 каждый раз, когда я набираю букву в данных, приводит к длительным задержкам.

Есть ли лучший способ, которым я могу оптимизировать это, чтобы я мог достичь своей цели, используя вложенные модели в моей таблице данных, не занимая так много времени?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...