Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 我可以在另一个操作(在rails控制器中)中调用一个操作吗?_Ruby On Rails - Fatal编程技术网

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'