当调用控制器中的操作时,我可以从该操作调用另一个操作吗?
如果两个动作都有一些模板要呈现会发生什么?
答案 0 :(得分:18)
是的,如果它在同一个控制器中,你可以。
调用zoo
将为动物园提供@x
和@a
实例的模板。 foo或bar都不会呈现。如果您已明确设置render
方法,则可能会出现双重渲染错误,除非在调用第二个渲染之前return
。
def foo
@x = 1
end
def bar
@a = 2
end
def zoo
foo
bar
end
答案 1 :(得分:0)
您可以使用redirect_to在控制器中调用另一个操作。要在另一个模板中渲染一个模板,可以使用部分和/或布局。
答案 2 :(得分:0)
Who对于如何调用操作是正确的,但是如果你在一个操作中调用一个动作,你需要重构你的代码以将你想要完成的逻辑拉出到自己的动作中,然后允许每个动作都要呈现自己的模板。
答案 3 :(得分:-1)
是的,你可以这样做。如果您可能将一个布局设置为nil,那么它将以一种很好的方式显示在您的视图中
说(以下示例将'my_controller'作为布局)
class my_controller < application_controller
def my_parent_method
@text_from_my_child_method = child_method
end
def child_method
return 'hello from child_method'
render :layout => false #here we are making the child_method layout false so that it #will not effect the parent method
end
end
并在你的'my_parent_method.rhtml'(查看)中你可以使用变量
<%= @text_from_my_child_method %> and it should print 'hello from child_method'
希望这会有所帮助
欢呼声, sameera
答案 4 :(得分:-1)
如果你想这样做,因为在这两个动作中都有某种通用代码,最好将这个代码重构为before_filter。