Tôi có biểu mẫu với 3 trường ActiveRecord. Một trong những trường đó có kiểu ngốc nghếch và yêu cầu xác thực STATE-DEPENDENT. (Ví dụ, tôi chỉ xác thực trường nếu đối tượng đang được tạo trên biểu mẫu trình hướng dẫn thiết lập.)cách bộ điều khiển có thể đặt lỗi xác thực theo cách thủ công cho một trường nhất định
Trong trình xử lý POST của tôi để tạo đối tượng, tôi nghĩ tôi có thể gọi lỗi.thêm để chèn điều kiện lỗi đặc biệt
@foo = Foo.new(params[:foo])
if goofy_conditions(params[:foo][:goofy_field])
@foo.errors.add(:goofy_field, "doesn't meet the goofy conditions")
end
respond_to do |format|
if @foo.save
...
else
... redirect back to form (with error fields hilited)
Tuy nhiên, làm @ foo.errors.add() trong bộ điều khiển dường như không làm bất cứ điều gì ... nó không ngăn lưu() nếu các trường khác vượt qua xác thực.
Cách khác là đặt trình xử lý xác thực tùy chỉnh vào mô hình ... Tôi biết sử dụng errors.add (: field, 'msg') hoạt động tốt ... nhưng trong trường hợp đó, trình điều khiển của tôi có thể 'vượt qua' như thế nào thông tin cho trình xác thực cho biết liệu trường có cần được xác thực hay không.
đặt một attrbute nonpersisted trên mô hình, nói hướng dẫn, thiết lập thích hợp và sau đó chỉ sử dụng nó trong xác nhận nrmal? –