控制器中的检查正确评估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
答案 0 :(得分:1)
这是一个清理过的代码版本,其实际上更像Ruby:
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
就足够了。