Wierzę, że jest to błąd w Rails 3. Mam nadzieję, że ktoś tutaj może sterować mną we właściwym kierunku. Zamieszczony poniżej kod jest jedynie ilustracją tego problemu. Mam nadzieję, że to nie myli problemu.default_scope breaks (update | delete | destroy) _all w niektórych przypadkach
Biorąc pod uwagę Mam model Post i model komentarza. Post has_many Komentarze i komentarze belongs_to Post.
Za pomocą zestawu default_scope w modelu Post, definiowanie powiązań() i where(). W tym przypadku gdzie() zależy od złączeń().
Zwykle posty nie będą zależne od komentarzy. Ponownie, chcę tylko dać prosty przykład. Może to być przypadek, gdy funkcja where() zależy od join().
class Post < ActiveRecord::Base
has_many :comments, :dependent => :destroy
default_scope joins(:comments).where("comments.id < 999")
end
class Comment < ActiveRecord::Base
belongs_to :post, :counter_cache => true
end
uruchamiając następującą komendę:
Post.update_all(:title => Time.now)
produkuje następujące zapytanie, a ostatecznie rzuca ActiveRecord :: StatementInvalid:
UPDATE `posts` SET `title` = '2010-10-15 15:59:27' WHERE (comments.id < 999)
Znowu update_all, delete_all, destroy_all zachowują się tak samo . Odkryłem to zachowanie, gdy moja aplikacja skarżyła się, próbując zaktualizować counter_cache. Które ostatecznie wierci w dół do update_all.
Hej, Ben, otworzyłeś problem na ten temat? –