我可以在另一个动作中调用动作(在rails控制器中)吗?

时间:2010-04-26 01:35:06

标签: ruby-on-rails

当调用控制器中的操作时,我可以从该操作调用另一个操作吗?

如果两个动作都有一些模板要呈现会发生什么?

5 个答案:

答案 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。