我正在使用Rails 3编写服务。该服务主要提供一些API方法,但也有一些特殊的网页为最终用户提供友好的界面 - 这些网页基本上是API的“封面”
所以我需要做的是在CoverController
中进行一些编码,然后重定向到API方法(不同的控制器)。此方法需要通过POST
进行调用,因为它包含一些最终用户不应看到的合理信息(例如访问令牌)。
据我了解HTTP标准,无法通过POST
重定向,但我需要调用的方法只是相邻类中的另一个函数!有没有办法用一切(params
等)正确设置来调用它,好像是从浏览器调用的?或者我应该使用Net::HTTP::Post
并自称?
答案 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隐藏敏感参数的事情。任何浏览器都会使用一个快捷方式显示此信息。