Tôi đang cố gắng hiểu các Callback Active Record, nhưng chúng không hoạt động, như tôi muốn.Làm cách nào để đặt thuộc tính trong đối tượng ActiveRecord trước khi tôi lưu?
ví dụ:
Mẫu
Checklist<ActiveRecord...
attr_accessible :item1, :item2, :done # they are all boolean
before_save :check_done
private
def check_done
if item1 && item2
write_attribute :done, true
else
write_attribute :done, false
end
end
này không hoạt động nếu tôi nhanh chóng một đối tượng trong giao diện điều khiển và cố gắng tiết kiệm nó, tiết kiệm hoạt động trở lại "false" :(
Có gì sai với mã này? cảm ơn trước :)
EDIT: Dường như có cái gì đó sai với "before_save" cuộc gọi, nếu tôi sử dụng "after_save", mã hoạt động ... nhưng các thuộc tính không được lưu (rõ ràng). Đó là thực sự lạ
EDIT 2 Weird ... các bản ghi sự phát triển cho thấy điều này
FROM sqlite_master
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
[0m
[1m[35mChecklist Load (0.2ms)[0m SELECT "checklists".* FROM "checklists" ORDER BY checklists.id DESC LIMIT 1
WARNING: Can't mass-assign protected attributes: id
nhưng đó là thực sự kỳ lạ, bởi vì nếu tôi loại bỏ các dòng attr_accessible tôi vẫn nhận được lỗi này ...
CHỈNH SỬA 3 Nếu có ai hỏi, vâng tôi đang cố cập nhật bản ghi hiện tại.
EDIT 4 Vâng, tôi muốn sửa Nếu tôi gõ vào console
c.save => # false
c.errors => #<OrderedHash {}>
Tại sao bạn có nghĩa là điều này không hiệu quả, các lỗi là gì? Bạn có thể kiểm tra bằng cách gọi cho yourobject.errors sau khi yourobject.save – Mike
oh, okay Tôi nhận được myobject.errors # –
tabaluga
Làm thế nào về 'myobject.errors.inspect' ?? – PeterWong