【发布时间】:2016-08-04 23:48:59
【问题描述】:
我刚刚发现,当我覆盖 Rails 模型的布尔设置器时,返回值的行为异常。
这是一个简单的User 模型,其中is_admin 是一个布尔字段。我想要的很简单:分别将String 'T'、'F' 转换为true、false。
class User < ApplicationRecord
def is_admin=(value)
case value
when 'T'
super(true)
when 'F'
super(false)
else
super
end
end
end
演员工作正常。 u = User.new; u.is_admin = 'T' 确实将 u.is_admin 设置为 true。然而表达式
u.is_admin = 'T'
返回 'T' 而不是 true。
这很容易通过创建一个全新的 Rails 5 项目并创建一个名为 User 的模型来轻松复制,其中只有一列 is_admin 为 boolean。之后,像我一样覆盖:is_admin,你会看到我看到的。
对奇怪的返回值有什么想法吗?谢谢!
【问题讨论】:
标签: ruby-on-rails rails-activerecord