Ruby on rails 我可以在另一个操作(在rails控制器中)中调用一个操作吗?
当控制器中的某个操作被调用时,我可以从该操作调用另一个操作吗Ruby on rails 我可以在另一个操作(在rails控制器中)中调用一个操作吗?,ruby-on-rails,Ruby On Rails,当控制器中的某个操作被调用时,我可以从该操作调用另一个操作吗 如果两个动作都有一些模板要渲染,会发生什么情况?是的,如果它在同一个控制器中,您可以 调用zoo将为zoo提供包含@x和@a实例的模板。不会渲染foo或bar。如果显式设置了渲染方法,则可能会出现双重渲染错误,除非在调用第二个渲染之前返回 def foo @x = 1 end def bar @a = 2 end def zoo foo bar end 您可以使用redirect_调用控制器中的另一个操作。要在另
如果两个动作都有一些模板要渲染,会发生什么情况?是的,如果它在同一个控制器中,您可以 调用
zoo
将为zoo提供包含@x
和@a
实例的模板。不会渲染foo或bar。如果显式设置了渲染
方法,则可能会出现双重渲染错误,除非在调用第二个渲染之前返回
def foo
@x = 1
end
def bar
@a = 2
end
def zoo
foo
bar
end
您可以使用redirect_调用控制器中的另一个操作。要在另一个模板中呈现一个模板,您可以使用部分和/或布局。关于如何调用操作的正确答案,但是如果您在一个操作中调用一个操作,则需要重构代码,将执行您试图完成的操作的逻辑提取到自己的操作中,然后允许每个动作呈现自己的模板。是的,您可以这样做。如果你可能会做一个一个布局,那么它将以一种很好的方式显示在你的视图中 假设(以下示例将“my_controller”作为布局)
class my\u controllerfalse#这里我们将子方法layout设置为false,以便它不会影响父方法
结束
结束
在“my_parent_method.rhtml”(视图)中,可以使用变量
<%= @text_from_my_child_method %> and it should print 'hello from child_method'
并应打印“hello from child_method”
希望这有帮助
干杯,
sameera如果您想这样做,因为这两个操作中都有某种共同的代码,那么最好将此代码重构为before\u过滤器。在
child\u方法中永远不会调用呈现。在执行渲染
行之前,您将退出该方法。您是否试图显示child\u方法
不会渲染视图?(这可以通过将child\u method
声明为private
来具体化)redirect\u to
不调用其他操作(在方法调用的意义上),而是告诉浏览器请求其他操作。动作只是方法,在处理请求时由ActionController
调用。它们可以从@TheWho显示的其他操作中调用。如果我在“bar”中显式设置了一个渲染方法,那么当调用“zoo”时,它是否会渲染bar的模板(即bar.html.erb)?是的,但您需要在zoo
中返回bar
,否则会出现DoubleRender错误。您最好将bar
和zoo
之间的共享逻辑抽象为受保护的方法。@调用foo和bar时,我可以向谁传递任何额外的参数?与foo一样,{user_id:3}@tusharh Rails控制器操作的方法不带参数。操作是映射到路由的方法,即:索引
,创建
,销毁
,等等。现在,您可以使用私有方法来获取参数,这是常规做法。@WHO感谢您的响应,但我确实想出了在这种情况下如何传递参数,这很简单,因为当从“zoo”操作调用“foo”操作时,zoo收到的所有参数也将发送到“foo”,因此我在调用“foo”之前在参数中添加了我的参数,如-params[:arg1]=“something”,现在可以在“foo”中访问它们。如果必须这样做,请记住将调用的方法放在private
后面,除非它本身是一条公开的路线
<%= @text_from_my_child_method %> and it should print 'hello from child_method'