2010-08-20 41 views
24

Tôi có trường DB là kiểu số nguyên và giá trị luôn là 0 hoặc 1. Làm cách nào để lấy giá trị boolean tương đương trong ruby? như vậy mà khi tôi làm như sau vào hộp kiểm tra được thiết lập một cách thích hợp:số nguyên ruby ​​thành boolean

<%= check_box_tag 'resend', @system_config.resend %> 

Trả lời

44

Bạn có thể sử dụng phương pháp zero?. Nó trả về true nếu 0. Nếu bạn cần phải lùi, bạn có thể dễ dàng phủ nhận nó đến [email protected]_config.resend.zero?. Hoặc bạn có thể mở rộng lớp Fixnum, thêm phương thức to_b?, vì mọi thứ đều mở và có thể mở rộng bằng các ngôn ngữ động.

class Integer 
    def to_b? 
    !self.zero? 
    end 
end 

alt text

của Ruby API: http://ruby-doc.org/core/classes/Fixnum.html#M001050

+0

Cảm ơn Jarret. Một phần giải pháp của tôi cũng là sử dụng trình trợ giúp check_box_tag đúng cách như vậy: <% = check_box_tag 'gửi lại', @ system_config.resend, @ system_config.resend%> – Rafael

+1

Lưu ý rằng cũng có ['nonzero?'] (Http: //ruby-doc.org/core-1.9.3/Numeric.html#method-i-nonzero-3F) có thể đọc tốt hơn '! zero?'. –

+6

Bạn có cố tình làm cho các dấu nhắc lệnh BSoD của bạn màu sắc không? – NullVoxPopuli

9

1 là giá trị thật duy nhất của bạn ở đây. Vì vậy, bạn có thể nhận được giá trị chân lý boolean với number == 1.

+0

Có lẽ điều này có thể được diễn đạt rõ ràng hơn. giải pháp tương thích tiêu chuẩn, điều đó xảy ra cũng phù hợp với câu hỏi thực tế. –

+0

@Simon B .: Tôi không chắc về câu trả lời của tôi ems "không chuẩn" cho bạn. Cả hai phương thức '==' và 'zero?' Đều là chuẩn của Ruby. Nhưng nó sẽ xảy ra khi 'number == 1' đọc rõ ràng hơn'! Number.zero? 'IMO. – Chuck

+0

Trong ruby, cả 0 và 1 đều là "trung thực", vì vậy trên thực tế không có cơ hội đưa ra câu trả lời ở đây cả "chuẩn" và trả lời câu hỏi. Lấy làm tiếc. Có lẽ tôi nên cố gắng để có được điều này vào văn bản câu hỏi hoặc tiêu đề. Bất cứ ai đến đây tìm kiếm "loại đúc trung thành" từ Fixnum đến Boolean nếu không sẽ bị lẫn lộn theo cách nào đó. Ngoài ra, theo http://drawingablank.me/blog/ruby-boolean-typecasting.html là có vẻ !! là lựa chọn duy nhất trung thành. Đó không phải là một lựa chọn trong câu hỏi trên. –

2

tôi đã cùng một vấn đề và giải quyết nó theo cách này:

def to_boolean(var) 
case var 
     when true,'true',1,'1' 
     return true 
     when false, 'false',0,'0' 
     return false 
end 
end 

này làm việc với các hình thức, cơ sở dữ liệu và những người không biết ruby. Tôi thấy nó hữu ích đặc biệt với Rails, vì các thông số thường được chuyển/giải thích dưới dạng chuỗi và tôi không muốn lo lắng về điều đó.

+2

Thụt lề ở đây không chuẩn. Mẫu đơn giản sẽ là def to_boolean (giá trị) ['true', 1, '1', true] .include? (Giá trị) end –

Các vấn đề liên quan