Trong Ruby on Rails v3.2.8, sử dụng lệnh after_initialize
gọi lại ActiveRecord, bạn có thể gọi một phương thức trong mô hình của mình sẽ gán các giá trị mặc định cho một đối tượng mới.
Lệnh gọi lại after_initialize được kích hoạt cho từng đối tượng được tìm thấy và khởi tạo bởi công cụ tìm kiếm, với after_initialize được kích hoạt sau khi các đối tượng mới cũng được khởi tạo ( xem ActiveRecord Callbacks ).
Vì vậy, IMO nó sẽ trông giống như sau:
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
cho trường hợp này trừ khi trường hợp chứa một attribute_whose_presence_has_been_validated
bản lưu / cập nhật trước đó. Sau default_value
đó, sẽ được sử dụng cùng với chế độ xem của bạn để hiển thị biểu mẫu bằng thuộc tính default_value
for bar
.
Tốt nhất đây là hacky ...
CHỈNH SỬA - sử dụng 'new_record?' để kiểm tra xem có khởi tạo từ một cuộc gọi mới hay không
Thay vì kiểm tra một giá trị thuộc tính, hãy sử dụng new_record?
phương thức tích hợp sẵn với đường ray. Vì vậy, ví dụ trên sẽ giống như sau:
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
Cái này sạch hơn nhiều. Ah, điều kỳ diệu của Rails - nó thông minh hơn tôi.