Tôi nghĩ sẽ tốt khi điền vào một trường trạng thái trong một bảng activeRecord bằng cách sử dụng các hằng số. Tuy nhiên, khi nói đến việc kiểm tra xem tình trạng này có một tình trạng cụ thể, tôi đang gặp rắc rối.Cách lưu trữ và so sánh: các biểu tượng trong ActiveRecord (Ruby on Rails)
Nếu tôi làm như sau,
e = Mytable.new
e.status = :cancelled
e.save
sau đó refind kỷ lục và thử và so sánh tình trạng của tôi vào biểu tượng, kiểm tra thất bại. Tôi có một số đầu ra từ giao diện điều khiển để hiển thị điều này.
irb(main):060:0> e.status.eql?("cancelled")
=> true
irb(main):061:0> e.status.eql?(:cancelled)
=> false
irb(main):062:0> e.status == :cancelled
=> false
irb(main):063:0> e.status == "cancelled"
=> true
irb(main):064:0> e.status == :cancelled.to_s
=> true
Có cách nào tốt hơn để giữ trạng thái trong hồ sơ không? Có cách nào để kiểm tra nếu giá trị trường hiện tại bằng biểu tượng: mà không chuyển đổi ký hiệu: thành chuỗi không? Tôi nghĩ rằng có thể có một nhà điều hành tôi không biết.
ecoologic có một giải pháp tốt cho bạn, nhưng tôi muốn giới thiệu có thể chỉ đạo xa này và có thể làm cho một lớp học với các hằng số trong đó. Bạn có thể làm những việc như 'e.status = Statuses :: CANCELLED' và những gì không. Và nội bộ có thể là một chuỗi và nó không quan trọng. Bạn vẫn đang sử dụng hằng số, và nó sẽ lỗi nếu hằng số đó không tồn tại, và nó sạch hơn theo cách đó. – MrDanA
tại sao bạn không ghi đè lên getter của cột của bạn? – apneadiving
Tôi đã sửa đổi câu trả lời của mình trước khi đọc hai bình luận này nhưng tôi muốn nói rằng tôi yêu giải pháp @MrDanA, bạn nên viết một câu trả lời và tôi sẽ bỏ phiếu! – ecoologic