Стремительная нагрузка на себя - PullRequest
0 голосов
/ 06 июля 2018

Reader.rb

has_many :book_readers, dependent: :destroy
has_many :books, -> { where('published_at < ?', Time.zone.now) },
       through: :book_readers

after_create :assign_available_books

def assign_available_books
  self.books += Book.available_to_new_readers
end

Book.rb

has_many :book_readers, dependent: :destroy
has_many :readers, through: :book_readers

def self.available_to_new_readers
  where(available_to_new:true)
    .includes(:readers)
    .select{ |a| a.readers.any? }
end

book_reader.rb

class BookReader < ActiveRecord::Base
  validates :book, uniqueness: { scope: :reader }

  belongs_to :book
  belongs_to :reader
end

reader_controller.rb

def create
  if create_reader
    redirect_to [:admin, :readers], notice: 'Created reader successfully'...
end
...
def create_reader
  reader_attributes = reader_params.clone
  admin_attributes = reader_attributes.delete(:reader_admin_attributes) || {}
  save_reader_and_admin(reader_attributes, admin_attributes)
end
...
def save_reader_and_admin(reader_attributes, admin_attributes)
  @reader, success = Reader.new(reader_attributes), false
  @reader.transaction do
    @reader.save || raise(ActiveRecord::Rollback)
    @reader.build_reader_admin(admin_attributes.merge(reader: @reader))
    @reader.reader_admin.save || raise(ActiveRecord::Rollback)
    @reader.save || raise(ActiveRecord::Rollback)
    success = true
  end
  success
end

Bullet Gem Сообщение при загрузке страницы:

USE eager loading detected
  Reader => [:books]
  Add to your finder: :includes => [:books]
Call stack
 app/models/reader.rb:94:in `assign_available_books'
 app/controllers/admin/readers_controller.rb:67:in `block in save_reader_and_admin'
 app/controllers/admin/readers_controller.rb:66:in `save_reader_and_admin'
 app/controllers/admin/readers_controller.rb:61:in `create_reader'
 app/controllers/admin/readers_controller.rb:18:in `create'

Проблема, с которой я столкнулся, заключается в том, что я не знаю, как добиться загрузки на self в методе assign_available_books.Я пытался добавить .includes(:books) к этому, но я получаю undefined method includes.

...