Estoy tratando de "contabilizar en caché" el número de publicaciones en cada etiqueta. La devolución de llamada después de guardar funciona pero la destrucción posterior no. Parece que destruir sql no es correcto.ActiveRecord - has_many: through,: dependent =>: destroy sql no es correcto
class Post < ActiveRecord::Base
has_many :post_tags, :dependent => :destroy
has_many :tags, :through => :post_tags
end
class Tag < ActiveRecord::Base
has_many :post_tags, :dependent => :destroy
has_many :posts, :through => :post_tags
end
class PostTag < ActiveRecord::Base
self.table_name = :posts_tags
belongs_to :post
belongs_to :tag
after_save :update_tag_posts_count
after_destroy :update_tag_posts_count
def update_tag_posts_count
tag.posts_count = tag.posts.count
tag.save
end
end
La prueba falla
# @tag.posts_count == 10
Failure/Error: @tag.posts.first.destroy
ActiveRecord::StatementInvalid:
Mysql2::Error: Unknown column 'posts_tags.' in 'where clause': DELETE FROM `posts_tags` WHERE `posts_tags`.`` = NULL
El SQL correcta debería ser
DELETE FROM `posts_tags` WHERE `posts_tags`.`post_id` = {the post id}
¿Intenta usar set_table_name en lugar de table_name =? Creo que el método set_table_name cambia algunas cosas más. –
@joe Pym Eso no funcionó. Además, set_table_name ahora está en desuso. -> ADVERTENCIA DE DEPRESIÓN: la llamada a set_table_name está en desuso. Por favor usa 'self.table_name = 'the_name'' en su lugar. – Marcelo
Recibo un error muy similar en mi situación. A mí también me gustaría una respuesta. – user1149547