Trong bộ điều khiển bộ điều khiển, tôi đã sử dụng Date.new
để tạo đối tượng ngày được chuyển trong ActiveRecord của mình.tăng ActiveRecord :: RecordNotFound (hoặc bất kỳ trạng thái 404) nào cho ngày không hợp lệ
end_range = Date.new(params[:year].to_i, params[:month].to_i, params[:day].to_i).end_of_day.to_formatted_s(:db)
Vấn đề với điều này trên là nếu người dùng cố gắng để thay đổi các thông số trong URL bằng tay, chẳng hạn như nhập 40
cho param ngày, Date.new
thất bại (như mong đợi). Tuy nhiên, tôi không muốn có một lỗi 500 nếu người dùng gõ vào một cái gì đó như thế, nhưng thay vì một lỗi 404 (vì bạn sẽ không bao giờ thực sự có thể có một kỷ lục với một ngày 40
).
Tôi đã thử nhiều điều kiện khác nhau (if
và unless
báo cáo) đến raise ActiveRecord::RecordNotFound
nếu không thành công, nhưng trả về lỗi 500 trước khi chạy điều kiện (và không bao giờ trả về 404).
Có ai biết cách nào tốt hơn để xử lý điều đó hay cách để cho phép Date.new
thất bại hơn để câu lệnh có điều kiện có thể chạy?
Cảm ơn, mà làm việc. Ví dụ thứ hai hoạt động tuyệt vời, đó là những gì tôi đã đi, nhưng tôi bắt đầu chỉ cố gắng thông qua một NotRound ActiveRecord chỉ để có được một cái gì đó khác hơn 500. (Nếu ai đọc, điều này, ActiveRecord là mistyped trong ví dụ đầu tiên.) –
cố định lỗi đánh máy. Rất vui được làm việc cho bạn. – tadman