rails redirect_to analog

时间:2013-01-11 12:59:47

标签: ruby-on-rails-3

我正在使用Rails 3编写服务。该服务主要提供一些API方法,但也有一些特殊的网页为最终用户提供友好的界面 - 这些网页基本上是API的“封面”

所以我需要做的是在CoverController中进行一些编码,然后重定向到API方法(不同的控制器)。此方法需要通过POST进行调用,因为它包含一些最终用户不应看到的合理信息(例如访问令牌)。

据我了解HTTP标准,无法通过POST重定向,但我需要调用的方法只是相邻类中的另一个函数!有没有办法用一切(params等)正确设置来调用它,好像是从浏览器调用的?或者我应该使用Net::HTTP::Post并自称?

2 个答案:

答案 0 :(得分:0)

你可以调用方法:     #在控制器中

# action 1
def action1
  ...
  action2
end

# must be called via post
def action2
  ...
end

当然,假设action2可以使用传递给action 1的现有params列表。否则,你也可以填写它。

答案 1 :(得分:0)

我认为你的想法是错误的。 Rails 3非常好,您可以调用操作,结果基于您调用操作的方式。

小例子:api返回当前时间:

def gettime
  @time = new Date
  # and do all other important stuff
  respond_to do |format|
    format.json { render json:  @time }
    format.html { render 'gettime' } # renders gettime.html.erb
  end
end

如果被称为api,则返回一个json对象。如果从浏览器调用,它将返回一个html页面。这样您就不会复制代码,并遵守用户启动操作或在另一个操作后重定向到操作的规则。

其他开发人员也会理解您的代码,并且它将完全放在它所属的位置。

BTW:没有使用post隐藏敏感参数的事情。任何浏览器都会使用一个快捷方式显示此信息。