2011-05-16 15 views
6

Birden çok katkıda bulunan yazarlara izin veren bir blog platformu olan bir Rails uygulamasına sahibim. Benim Kullanıcı modelinde, yazma izni atamak için : yazarı boole özniteliği vardır. Ancak, : yazarKullanıcı modeli için attr_accessible altında listelenen DEĞİLDİR. Model Özelliklerini Güncelleştirme

Ben konsol üzerinden

User.find_by_id(user_id).update_attribute(:writer, true/false) 

çalıştırmak zorunda kalmadan, web üzerinden bu özelliği düzenlemek için bir yol istedi ama bu imkansız olurdu eğer listeleme olmadan merak ediyorum: yazaraltında Kullanıcı modeli için attr_accessible. Sadece yönetici kullanıcılarına erişebildiğim birkaç sayfam var ve bu görüntülemelerde : yazarı özniteliğini değiştirebilme özelliğini kullanmak istiyorum.

Eğer bu mümkün mü, nasıl yapılabilir? Yardımın için şimdiden teşekkürler!

Düzeltme: Aldığım cevaplara dayanarak, sorularımda daha spesifik olmalıydım. Özür dilerim. Beerlington ve Hitesh'in işaret ettiği gibi : yazarı özniteliğini tek tek güncelleyebileceğimi anlıyorum. Bilmek istediğim, böyle bir işlevi nasıl görebiliyordu. Yazar durumuna geçiş yapmak için tıklanabilir bir bağlantı yapmak mümkün mü? Bir denetleyici işlevi çağrısına sahip olmak ve user_id'u için iletmek mümkün olabilir: yazar değiştirme? Sadece mass-assignment gelen özelliklerini koruyan attr_protected

cevap

7

attr_accessible ve.

Kütle Atama (işe yaramaz): Yine de bu başka yollarla onları atayabilirsiniz

model.update_attributes(:admin => true) 

Olmayan Kütle Ataması (opsiyon 1):

model.admin = boolean 
model.save 

Olmayan Kütle Ataması (seçenek 2):

model.send(:attributes=, attributes, false) 

olmayan Kütle Atama (opsiyon 3):

Kişisel olarak bu el ile yapılan seçeneklerden hiçbirini beğenmedim, bu yüzden "sudo" yöntemlerini kullanarak toplu atamayı geçersiz kılmayı kolaylaştıran sudo_attributes adlı bir taş yazdım.

+0

Teşekkürler Beerlington! Bu seçeneklerden herhangi birini, bir düğmeyle veya tıklanabilir bağlantı yoluyla, görünüm üzerinden uygulamak için bir yol var mı? – ArcGhost

+0

Bu, görünümde olamaz ve denetleyicinizde veya modelinizde olması gerekir. –

+0

Bunu yapmak için bir yöntem oluştursaydım, toggle_writer, denetleyicimde, bir düğme veya tıklanabilir bağlantı aracılığıyla _that_ çağrılabilir mi? – ArcGhost

1

kullanımı bu

User.find_by_id(user_id).update_attribute(:writer, true) or 
User.find_by_id(user_id).update_attribute(:writer, false)