我刚刚发现,当我覆盖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
,你会看到我所看到的。
关于奇怪的返回值的任何想法?谢谢!
答案 0 :(得分:2)
赋值运算符始终返回右手值。就那么简单。观察:
class Foo
def bar=(val)
@bar = val.to_s # => "1234"
end
end
f = Foo.new
f.bar = 1234 # => 1234