Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.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:从一个控制器操作重定向到另一个控制器操作(非GET)_Ruby On Rails_Routing_Put - Fatal编程技术网

Ruby on rails Rails:从一个控制器操作重定向到另一个控制器操作(非GET)

Ruby on rails Rails:从一个控制器操作重定向到另一个控制器操作(非GET),ruby-on-rails,routing,put,Ruby On Rails,Routing,Put,我有一个GET路径,在渲染视图之前,控制器会检查可选参数。如果有,我想绕过渲染视图,直接重定向到另一个控制器操作。另一个操作是PUT路由,我意识到我们不能像重定向到GET路由那样简单地重定向到PUT路由 这大概是我到目前为止所尝试的,但我不知道如何调用重定向,因为PUT是不可能的。也许有一些不同的设计模式来处理这种行为?提前谢谢 Controller actions: def foo if 'XYZ' # "redirect" to bar else ren

我有一个GET路径,在渲染视图之前,控制器会检查可选参数。如果有,我想绕过渲染视图,直接重定向到另一个控制器操作。另一个操作是PUT路由,我意识到我们不能像重定向到GET路由那样简单地重定向到PUT路由

这大概是我到目前为止所尝试的,但我不知道如何调用重定向,因为PUT是不可能的。也许有一些不同的设计模式来处理这种行为?提前谢谢

Controller actions:

def foo      
  if 'XYZ'
    # "redirect" to bar
  else
    render 'view'
  end
end

#bar is a PUT route
def bar 
  ...
end

如果你有这样的酒吧活动路线

match '/controller/bar/' => 'controller#bar'
像这样修改它

match '/controller/bar/' => 'controller#bar' , :via => [:get,:post,:put]

如果您只想在满足条件的情况下使用bar方法

def foo      
  if 'XYZ'
    bar
  else
    render 'view'
  end
end
这将运行bar方法并利用其中的任何重定向。更可能的情况是,你想重新审视你想要实现的目标


如果你能提供更多的细节,那么你会得到更好的答案。

这里有些东西闻起来很可疑。为什么要将PUT请求重定向到其他地方处理?也许你需要改变你的路线instead@yoavmatchulsky嗯,那可能有用。我想保留原来的PUT路径,因为它被应用程序的另一部分使用。它可能不枯燥,但您认为最好将PUT路由中的代码添加到if XYZ行下的foo?如果您使用的是RESTful rails体系结构,PUT请求应该更新对象或实体。如果不是这样的话,也许你可以提取一个新的表单对象。尝试阅读,因为我没有想到你可以像ruby对象一样简单地调用路由。谢谢为了澄清这一点,PUT仍然在对资源进行更新,然后它会在之后呈现一个视图。我只是想在满足条件的情况下绕过默认的视图渲染行为。抱歉,如果在OP中不清楚的话