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

时间:2016-11-22 05:53:37

标签: ruby-on-rails ruby controller modal-dialog

控制器中的检查正确评估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

1 个答案:

答案 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就足够了。