2011-01-29 15 views
16

Sadece bu kod var bir modeli dosyasında ise: Bunun ne anlamaRuby on Rails kullanan bir model için alanların HERHANGİ BİRİNE erişmesine izin vermek için 'attr_accessible' ayarını nasıl yapabilirim?

class Users < ActiveRecord::Base 
end 

? Modelle ilgili tüm nitelikler erişilebilir mi değil mi? Benalanlar o modeli için herhangi erişime izin amacıyla 'attr_accessible' ayarlayabilirsiniz nasıl

?

+2

Ayrıca "modeli ile ilgili tüm özellikler erişilebilir değil misin?" Diye sordu - varsayılan olarak tüm alanları toplu atama –

cevap

34

Sadece ayarlayın:

class Users < ActiveRecord::Base 
    attr_accessible #none 
end 

gibi Pan Thomakos attr_accessible kitle ret olabilir parametrelerin dizisidir (adı geçen hiçbir sembolleri göndermek, o zaman hiçbir parametreler erişilebilir olacaktır

..

This ticket was useful

+0

Bu kesinlikle en basit ve en iyi yaklaşımdır. Tersine, '' attr_protected '' ayarlayabilirdiniz: her,: bir,:,, sizin,: öznitelikler ' – Andrew

+2

Gelecek taşmaları için --- bu Rails 4 için geçerlidir ... Rails 4'te, bunu strong_parameters https kullanarak halledeceksiniz : //github.com/rails/strong_parameters –

10

Varsayılan olarak, özniteliklerin hepsi attr_accessible'tır (bu, bunların kütle atamamı ayarlamaları anlamına gelir).

  • attr_accessible - bu öznitelik listesi, toplu atamalar (beyaz liste) ile ayarlanabilir.
  • attr_protected - bu özellikler, toplu atamalar (siyah liste) ile ayarlanamaz.
  • attr_readonly - bu öznitelikler, kayıt oluşturulduğu zaman haricinde ayarlanamaz.

tamamen kitle atama devre dışı böyle bir şey kullanmak için:

 
ActiveRecord::Base.send(:attr_accessible, nil) 

tüm aktif rekor nesneler için toplu atama devre dışı bırakır, ancak bu komutu gerçekleştirmek için bir veya daha fazla model belirtebilirsiniz Bu komut Bazı durumlarda kitle atamayı istiyor ancak başkalarında istemiyorsunuz.

+0

için erişilebilir Ama nasıl " 'attr_protected' olabilir "belirli bir model için tüm özellikler? – user502052

+0

Gönderiyi bu bilgilerle de güncelledim. –