Câu hỏi này khá cũ, nhưng kể từ khi tôi gặp vấn đề này một vài lần và không thích bất kỳ giải pháp nào được đề xuất, tôi đã tự hack một số thứ cho phép sử dụng nhiều chuỗi cho đúng chẳng hạn như ' có ',' trên ',' t 'và ngược lại với giả.
khỉ vá các lớp String, và thêm một phương pháp để chuyển đổi chúng sang boolean, và đặt tập tin này trong /config/initializers
như đề xuất ở đây: Monkey Patching in Rails 3
class String
def to_bool
return true if ['true', '1', 'yes', 'on', 't'].include? self
return false if ['false', '0', 'no', 'off', 'f'].include? self
return nil
end
end
Chú ý rằng nếu giá trị là không ai trong số những người hợp lệ hoặc cho đúng hay sai, sau đó nó trả về nil. Không giống như tìm kiếm ?paid=false
(trả lại tất cả hồ sơ chưa được thanh toán) so với ?paid=
(Tôi không chỉ định xem nó có được thanh toán hay không - vì vậy hãy loại bỏ điều này).
Sau đó, sau ví dụ này, logic trong điều khiển của bạn sẽ trông như thế này:
Something.where(:paid => params[:paid].to_bool) unless params[:paid].try(:to_bool).nil?
Nó khá gọn gàng, và giúp giữ bộ điều khiển/mô hình sạch.
Không có những điều như các phép toán luận trong ruby, chỉ 'TrueClass' và' FalseClass' – NullUserException
Rails vẫn con số nó ra automagically khi tham số có liên quan đến một mô hình - nếu kiểu cột trong cơ sở dữ liệu là boolean, nó xử lý tham số dưới dạng 'TrueClass' hoặc' FalseClass'.Bất kỳ ý tưởng làm thế nào tôi có thể làm điều này độc đáo? – nfm
có thể trùng lặp của [Làm thế nào để kiểm tra xem một param là đúng hay sai?] (Http://stackoverflow.com/questions/1711547/how-to-check-if-a-param-is-true-or-false) vì "Có cách nào tốt hơn để làm điều đó nếu/else tuyên bố dựa trên một param là đúng hay sai?" –