================================================== =========================
Güncelleme: 19 Temmuz 2017
Şimdi Rails belgeleri de şu şekilde kullanılmasını öneriyor super
:
class Model < ActiveRecord::Base
def attribute_name=(value)
# custom actions
###
super(value)
end
end
================================================== =========================
Orijinal Yanıt
Modellere erişirken bir tablonun sütunları için ayarlayıcı yöntemlerini geçersiz kılmak istiyorsanız, bunu yapmanın yolu budur.
class Model < ActiveRecord::Base
attr_accessible :attribute_name
def attribute_name=(value)
# custom actions
###
write_attribute(:attribute_name, value)
# this is same as self[:attribute_name] = value
end
end
Rails belgelerindeki Varsayılan erişimcileri geçersiz kılma konusuna bakın .
Dolayısıyla, ilk yönteminiz Ruby on Rails Modelleri'ndeki sütun ayarlayıcılarını geçersiz kılmanın doğru yoludur. Bu erişimciler, tablonun sütunlarına modelin nitelikleri olarak erişmek için Rails tarafından zaten sağlanmıştır. Buna ActiveRecord ORM eşlemesi diyoruz.
Ayrıca attr_accessible
, modelin üst kısmındaki erişimcilerle hiçbir ilgisi olmadığını unutmayın. Tamamen farklı bir işlevselliğe sahiptir ( bu soruya bakın )
Ancak saf Ruby'de, bir sınıf için erişimciler tanımladıysanız ve ayarlayıcıyı geçersiz kılmak istiyorsanız, aşağıdaki gibi örnek değişkenini kullanmanız gerekir:
class Person
attr_accessor :name
end
class NewPerson < Person
def name=(value)
# do something
@name = value
end
end
Ne yaptığını anladıktan sonra bunu anlamak daha kolay olacaktır attr_accessor
. Kod attr_accessor :name
bu iki yönteme eşdeğerdir (alıcı ve ayarlayıcı)
def name # getter
@name
end
def name=(value) # setter
@name = value
end
Ayrıca, ikinci yöntemin başarısız olması, çünkü bu yöntemin attribute_name=
içinde aynı yöntemi çağırdığınızda sonsuz bir döngüye neden olacaktır .