控制器中的签入值对于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发布于 2016-11-22 06:02:27
这里有一个清理过的代码版本,它实际上更像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就足够了。
https://stackoverflow.com/questions/40734710
复制相似问题