У меня есть модель
class Country
has_many :graphs
end
и
class Graph
has_one_attached :total_plot
has_one_attached :delta_plot
end
Когда я создаю новый график с вложением total_plot
, я хочу удалить все старые графики с вложением total_plot
, В модели country.rb
мой код выглядит следующим образом:
old_graphs = graphs.joins(:total_plot_attachment)
graph = Graph.make_a_new_total_plot #creates a new graph with a total_plot attached
old_graphs.destroy_all
Но это не работает, возможно, потому что old_graphs.destroy_all
удаляет не только old_graphs, но и новый граф. Я думаю, что происходит то, что old_graphs загружается лениво и вычисляется только при выполнении old_graphs.destroy_all
, когда новый граф включается в объединение и поэтому удаляется.
Если я добавлю выражение вроде puts "old_graphs: #{old_graphs.map(&:id)}"
после первой строки это вызывает оценку и код работает, но как правильно заставить Graphs.joins(:total_plot_attachment)
быть оцененным немедленно?