2011-06-30 11 views
5

Düzenli bir kullanıcının bir modeli düzenleyebileceği, ancak düzenlemelerin bir yönetici tarafından onaylanana kadar gerçekleşmediği bir sisteme ihtiyacım var. Model sürümüne sahip olan ancak özel olarak ne yapmak istediğimi desteklemeyen paper_trail adlı bir mücevher buldum. Başkalarının bu sorunu nasıl ele aldığını merak ediyorum. Ayrıca, kullanıcının aynı anda düzenleme yapmasını istediğim dernekler olduğunu da eklemeliyim. Çok karmaşık değiller, örneğin biri takma addır.Yönetici onayı nasıl ayarlanır Bir modelin düzenlemeleri

Çok sayıda kullanıcının aynı modeli düzenlediği ve bir çeşit birleştirme yapmaya çalıştığı durum daha karmaşık bir bölüm olabilir.

+1

Bir çözüm buldunuz mu? – ZMorek

cevap

1

Sürüm yaklaşımıyla sürüm oluşturmanın bir yolu olacaktır.

Her düzenleme, model nesnesinin ve ilişkilendirmelerinin yeni bir sürümünü oluşturur. Herhangi bir zamanda herhangi bir model nesnenin sadece bir "güncel" versiyonu vardır (ve veritabanında temsilidir).

İki kullanıcı iki ayrı düzenleme sunuyorsa, bunlar iki "bekleyen" sürüm oluşturur.

Bir yönetici, geçerli sürümü yeni "bekleyen" sürüme geçirerek düzenlemeleri onaylayabilir. Birleşmeler de başarılabilir, ancak bu çok etki alanına özgü olabilir ve çakışmalara neden olabilir, bu nedenle ayrı sürümlerin her zaman akıllı olması gerekir.

Bunu başarmanın birkaç yolu vardır ve en iyisi durumun dinamiğine bağlı olacaktır.

Git'in nasıl çalıştığına bakıp sisteminizi modellemeye çalışmanızı öneririm. Bir revizyon geçmişine ve HEAD'i farklı revizyonlara geçirme yeteneğine sahip HEAD model nesnesine bir çeşit işaretçi. Birleştirme de Git'e benzer şekilde çalışabilir.

Bu yardımcı olur umarım.

+0

Modelin diğer sürümlerini oluşturmanın, veritabanını diğer sürümlerle kirleteceğinizden beri gitmenin yol olduğunu düşünmüyorum. Aslında bunu yapmak için paper_trail'i değiştirmenin bir yolu olması gerektiğini düşünüyorum. Yeni bir sürüm oluşturmak, ancak güncel nesneyi güncellemek gibi. – hadees

+0

iyi, eski sürümleri bir cron veya onayla temizleyebilirsiniz, ancak temelde aynı sorun. Yeni sürümler oluşturursunuz, artık umursamadığınızları silin. –

0

Aynı sorunlara bakıyorum, revizyonların onaylanması, this'dan gelebilirim, paper_trail ile benzer bir şey yapabildiğinizden şüpheleniyorum.