Ключевое наблюдение здесь - это разница между .new и .create.Для моего приложения Devour.space я столкнулся с той же проблемой.Если вы создаете объект в памяти, используя:
tag = @post.tags.new(tag_params)
tag.save
В базе данных не будет сохранено ни одной записи tag_joins.@ post.tags не вернет ваш новый тег.Вы должны использовать .create в момент создания экземпляра, иначе связь не будет записана в таблицу JOIN:
tag = @post.tags.create(tag_params)
@post.tags.last # tag
В моей ситуации это потребовало изменения в том, как мое действие create обрабатывает запросы и ошибки:1007 *
has_many :deck_shares
has_many :decks, through: :deck_shares
....
deck = current_user.decks.new(deck_params)
if deck.save # Does not create entry in DeckShares table
render json: deck
else
render json: deck.errors, as: :unprocessable_entity
end
Это стало:
begin
deck = current_user.decks.create(deck_params) # creates DeckShare
rescue Exception => e
render json: e, as: :unprocessable_entity
end
render json: deck unless e