Di Ruby on Rails v3.2.8, dengan menggunakan after_initialize
callback ActiveRecord, Anda bisa memanggil metode dalam model Anda yang akan menetapkan nilai default untuk objek baru.
callback after_initialize dipicu untuk setiap objek yang ditemukan dan dibuat oleh finder, dengan after_initialize dipicu setelah objek baru juga dibuat ( lihat Callback ActiveRecord ).
Jadi, IMO itu akan terlihat seperti:
class Foo < ActiveRecord::Base
after_initialize :assign_defaults_on_new_Foo
...
attr_accessible :bar
...
private
def assign_defaults_on_new_Foo
# required to check an attribute for existence to weed out existing records
self.bar = default_value unless self.attribute_whose_presence_has_been_validated
end
end
Foo.bar = default_value
untuk contoh ini kecuali jika contoh tersebut berisi attribute_whose_presence_has_been_validated
penyimpanan / pembaruan sebelumnya. The default_value
kemudian akan digunakan bersama dengan pandangan Anda untuk membuat bentuk menggunakan default_value
untuk bar
atribut.
Paling banter ini hacky ...
EDIT - gunakan 'catatan_baru?' untuk memeriksa apakah membuat instance dari panggilan baru
Alih-alih memeriksa nilai atribut, gunakan new_record?
metode bawaan dengan rel. Jadi, contoh di atas akan terlihat seperti:
class Foo < ActiveRecord::Base
after_initialize :assign_defaults_on_new_Foo, if: 'new_record?'
...
attr_accessible :bar
...
private
def assign_defaults_on_new_Foo
self.bar = default_value
end
end
Ini jauh lebih bersih. Ah, keajaiban Rails - lebih pintar dariku.