【发布时间】:2012-02-20 16:56:14
【问题描述】:
我认为使用常量填充 activeRecord 表中的状态字段会很好。但是,在检查此状态是否具有特定状态时,我遇到了麻烦。
如果我执行以下操作,
e = Mytable.new
e.status = :cancelled
e.save
然后重新查找记录并尝试将我的状态与符号进行比较,检查失败。我有一些来自控制台的输出来显示这一点。
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
有没有更好的方法在记录中保存状态?有没有一种方法可以测试当前字段值是否等于 :symbol 而不将 :symbol 转换为字符串?我在想可能有一个我不知道的操作员。
【问题讨论】:
-
ecoologic 为您提供了一个很好的解决方案,但我建议您不要这样做,并可能创建一个包含常量的类。你可以做
e.status = Statuses::CANCELLED之类的事情,而不能做的事情。在内部,这可能是一个字符串,这并不重要。您仍在使用常量,如果该常量不存在,它会出错,这样会更干净。 -
为什么不覆盖列的getter?
-
我在阅读这两个 cmets 之前修改了我的答案,但我想说我喜欢 @MrDanA 解决方案,你应该写一个答案,我会投票!
标签: ruby-on-rails ruby-on-rails-3 activerecord symbols