控制器中的检查对if o.my_method('a')
进行了正确评估,尽管当这种情况发生时,@var
在模型中保持零。我要在哪里出错,还是有更好的方法来做到这一点?
控制器:
def action
o = Object.new
if o.my_method('a')
...
end
end
模型:
class Object
def my_method(args)
['a', 'b', 'c'].any? do |i|
@var = true if args.include?(i)
end
end
def my_method2
if @var == true
do stuff
end
end
end
这是您的代码的清理版本,实际上更像是红宝石的自然界:
class MyModel
attr_accessor :example
VALID_VALUES = %w[ a b c ]
def demo_method(value)
@example = true if VALID_VALUES.include?(value)
end
end
model = MyModel.new
model.demo_method('x')
model.example
# => nil
model.demo_method('a')
model.example
# => true
您在原始代码中遇到的问题是,您正在设置any?
块中的值,该块还可以进行包含的测试。不需要这个嵌套。
您也不需要测试x == true
,因为x
就足够了。