Rails создает недопустимую запись модели соединения для отношения многие ко многим - PullRequest
0 голосов
/ 03 мая 2018

У меня есть 2 модели с отношением «многие ко многим», реализованные has_many / own_to, следующим образом:

class Author < ApplicationRecord
  has_many :author_books
  has_many :books, :through => :author_books, :validate => false
end
class Book < ApplicationRecord
  has_many :author_books
  has_many :authors, :through => :author_books, :validate => false
end
class AuthorBook < ApplicationRecord
  belongs_to :author
  belongs_to :book
end

Таблицы были созданы в следующей миграции:

create_table :books do |t|
  t.string :name
  t.integer :price
end
create_table :authors do |t|
  t.string :name
end
create_table :author_books do |t|
  t.integer :book_id
  t.integer :author_id
  t.integer :percent
end

Когда я выполняю следующий тестовый код:

Book.delete_all
Author.delete_all
AuthorBook.delete_all

author1 = Author.create name: 'a1'
author2 = Author.create name: 'a2'

book = Book.new name: 'b', price: 40
book.authors = Author.where("id = #{author1.id} or id = #{author2.id}")
ret = book.save

AuthorBook.all.each do |ab|
  puts "Author id #{ab.id} author #{ab.author_id} book #{ab.book_id}"
end

Я получаю следующий хороший вывод:

Author id 1 author 980190963 book 980190963
Author id 2 author 980190964 book 980190963

Но когда я добавляю следующее after_save в AuthorBook:

after_save :f

def f
  self.book.author_books.each do |ab|
    # nothing
  end
end

Я получаю следующий хороший вывод:

Author id 1 author 980190963 book 980190963
Author id 2 author 980190964 book 

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

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