Aby obciąć tabelę ActiveRecord, mogę zrobićJak obciąć stół łączenia w szynach?
Category.destroy_all
lub
Post.destroy_all
Jak można o obcinania categories_post
tabeli?
Aby obciąć tabelę ActiveRecord, mogę zrobićJak obciąć stół łączenia w szynach?
Category.destroy_all
lub
Post.destroy_all
Jak można o obcinania categories_post
tabeli?
Dla prawdziwego TRUNCATE
, można użyć execute
do uruchomienia surowego kodu SQL.
ActiveRecord::Base.connection.execute("TRUNCATE TABLE #{table_name}")
Twoje przykłady wykorzystujące modele nie robiły prawdziwe TRUNCATE
zapytań.
destroy_all
nie TRUNCATE
stół. "Niszczy warunki dopasowania rekordów poprzez tworzenie instancji każdego rekordu i wywoływanie jego metody niszczenia" (link).delete_all
jest bliżej - ignoruje oddzwonienia - ale nadal nie jest to TRUNCATE
.Metoda usuwa wiersze z bazy danych bez tworzenia żadnych instancji modelu.
Również rzeczywiste TRUNCATE
zapytań, przynajmniej w MySQL, zresetuje automatycznego przyrostu na klucz podstawowy, tak że następny rekord włożeniu będzie miał identyfikator 1.
Domyślam się, że twoja tabela złącz nazywa się categories_posts. CategoryPost.destroy_all powinny działać, jeśli nie, to może trzeba podać nazwę tabeli w modelu (CategoryPost)
set_table_name "categories_posts"
Update, nie jest modelem CategoryPost, więc powinno być tworzone:
class CategoryPost < ActiveRecord::Base
set_table_name "categories_posts"
end
łączenia tabel nie masz powiązany model. np. "CategoryPost" –
możesz go utworzyć – jordinl