使用与Ruby的控制器设置模型中的实例变量值



控制器中的检查对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就足够了。

最新更新