Rails - 如何对每个方法强制执行一个方法调用,比如控制器使用`render`

时间:2013-12-25 18:58:54

标签: ruby-on-rails ruby

因此,在Rails中,如果您尝试在控制器操作中多次调用render,则会出现错误。

我正在编写另一个Ruby类,我想尝试做类似的事情(确保我自己的respond_with方法只被调用一次。

所以,例如,这没关系:

def my_method
  if (my_value == true)
    ...
    respond_with(:a, :b, :c)
  else
    ...
    respond_with(:x, :y, :z)
  end
end

但如果my_value == 4

,这会引发错误
def my_method
  if (my_value >= 4)
    ...
    respond_with(:a, :b, :c)
  end

  if (my_value <= 4)
    ...
    respond_with(:d, :e, :f)
  else
    ...
    respond_with(:x, :y, :z)
  end
end

关于如何最好地实现这一点的任何想法?

2 个答案:

答案 0 :(得分:2)

class MyBaseClass
  def respond_with(arguments)
    if @rendered
      raise DoubleRenderError #or whatever
    end
    @rendered = true
    #whatever the respond_with function should do
  end
end

答案 1 :(得分:1)

这是我能想到的一种方式 - 在Ruby类中,通过执行attr_accessor :responded来定义@responded属性。在respond_with方法中,添加以下行:

def respond_with
  raise DoubleRenderError if self.responded
  # do stuff
  self.responded = true
end

如果在同一个对象上调用respond_with两次,上面的代码会引发错误。