因此,在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
关于如何最好地实现这一点的任何想法?
答案 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两次,上面的代码会引发错误。