class Post < ActiveRecord::Base
has_many :posts_tags
has_many :tags, through: :posts_tags
end
class PostsTag < ActiveRecord::Base
belongs_to :post
belongs_to :tag
end
class Tag < ActiveRecord::Base
has_many :posts_tags
has_many :posts, through: :posts_tags
end
Post imha edildiğinde, tüm ilişkilendirmelerinin Tag'a gönderilmesini istiyorum. Çalıştırmak için PostsTag modelinde doğrulama istemiyorum. Sadece silmek istiyorum.has_many dosyasını silmek için uygun yol: kayıt kayıtları aracılığıyla?
Post modelindeki gönderim etiketleriyle ilişkisine bir bağımlı eklemenin, istediğim gibi çalıştığını buldum: has_many :posts_tags, dependent: :delete_all
. Bununla birlikte, konuyla ilgili belge, bunun yerine şunu yapmamı önerdi: has_many :tags, through: :posts_tags, dependent: :delete_all
. Bunu yaptığımda, Tag nesnesi yok edilir ve birleştirme nesnesi kalır.
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many
has_many için, hep geri aramaları çalıştırmak böylece kaldırılmakta kaydı (ler) in imha yöntemini çağıracak yok. Ancak silme, ya bağımlı olan seçenek tarafından belirtilen stratejiye göre silinir ya da bağımlı olmayan seçenek verilirse varsayılan stratejiyi izler. Varsayılan strateji: nullify (yabancı anahtarları nil olarak ayarlayın), , has_many: through, varsayılan stratejinin delete_all olduğu yerde (birleştirme kayıtlarını çalıştırmadan, birleştirme kayıtlarını sil).
- nasıl varsayılan stratejiyi gerçekte kullanılan olabilir? Eğer ayrılırsam: tamamen bağımlı, hiçbir kayıt kaldırılmaz. Ve sadece şunu gösteremiyorum: has_many ilişkisine bağlı. Raylar geri dönüyor ve diyor ki: "Bağımlı seçenek, aşağıdakileri bekliyor: yok,: delete_all,: nullify veya: restrict ({})".
- ben belirtmezseniz:
Belki bu yanlış ve buldum yaklaşım okuyorum önermek gibi görünüyor ilişkilerin her iki bağımlı, bu PostsTag nesne üzerinde POST_ID geçersiz DEĞİLDİR işler doğru yoldur? arasında
Bir Tag birden çok Mesaj tarafından kullanılıyorsa ne olur? Bir Mesaj silindiyse, diğer Mesajlar bundan etkilenir. –
true, ve Tag olmalıdır 'has_many: gönderiler, yoluyla:: posts_tags' gönderiler,' has_many kullanır: posts_tags, bağımlı:: post_tag silmek ve etiketleri tek başına bırakmak. Artık etiketlerini bir komisyon görevi veya konsolu ile silebilirsiniz. – rmagnum2002
Dergi düzeltildi, teşekkürler. Sadece belgeleri anlamaya çalışıyorum.İfadeler – Brian