2011-02-15 9 views
17

Rails uygulamasını 2.3.10'dan 3.0.4'e yükseltiyorum ve denetleyicideki modelleri güncellemeyle ilgili bir sorunla karşılaşıyorum. Kullanıcıların kendilerine ait olmayan nesneleri güncellemelerini engellemek için model bulgular oluşturuyordum. 2.3'te beklendiği gibi çalışır, ancak Rails 3'teki update_attributes ile bir ActiveRecord :: ReadOnlyRecord hatası alıyorum.Rails 3 Kapsamlı Bilgi Verme ActiveRecord :: ReadOnlyRecord'u kullanıyor

Rails 3'te bunu yapmanın doğru yolu nedir?

Proje kontrolörü:

def update 
    @project = current_user.projects.find(params[:id]) 

    if @project.update_attributes(params[:project]) 
    # saved 
    else 
    # not saved 
    end 
end 
+0

Kimlik doğrulaması için hangi kütüphaneyi kullanıyorsunuz? Nesnenizde #readonly olarak adlandırdığınız görünüyor - bunun için proje çapında bir arama deneyin. –

cevap

42

O aktif rekor ilişkilendirmeleri taklit kapsamlarını kullanarak ilgiliydi çıkıyor. Kapsamlarıma .readonly(false) ekleyerek düzeltemedim.

+0

Aynı problem vardı ve bu benim için de düzeltildi. Herhangi bir fikir 'ActiveRecord :: ReadOnlyRecord 'neden nedir? – Jeriko

+1

genellikle neden bir AR katılımı, "vanilya has_many" projeleri "projeler" veya bir birleştirme cümlesi kullanıyor mu? –

3

Olası bir çözüm, yeni dosya config/active_record_monkey_patch.rb oluşturmak ve aşağıdaki içeriği eklemek. salt okunur (yanlış) tüm modeller için kod çalışması yukarıda

module ReadOnlyFalse 
    def self.included(base) 
    base.class_eval do 
     def readonly? 
     false 
     end 
    end 
    end 
end 

ActiveRecord::Base.send(:include, ReadOnlyFalse) 

.