Quá trình di chuyển chỉ được chạy khi bạn tạo cơ sở dữ liệu hoặc thực hiện các thay đổi đối với cấu trúc của cơ sở dữ liệu, không phải khi lưu bản ghi mới. Mikhail đã đúng khi đề xuất before_save
gọi lại. Bạn có thể làm điều gì đó như thế này trong mô hình của mình:
class Model < ActiveRecord::Base
before_save :set_empty_color_to_random_value
def set_empty_color_to_random_value
self.color = Color.order("RANDOM()").first.color if self.color.empty?
end
end
Lưu ý rằng RANDOM()
hoạt động cho PostgreSQL và SQLite, nhưng không hoạt động cho MySQL. Đối với MySQL, bạn phải sử dụng RAND()
thay vào đó.