在Rails 4中忽略来自浏览器的http请求

时间:2016-06-22 19:19:53

标签: ruby-on-rails

我正在尝试启用我的Rails应用程序来忽略来自其他控制器操作之外的任何HTTP请求。例如,假设我在控制器中有操作:

class ChargesController < ApplicationController
  before_action :set_charge, only: [:show, :edit, :update, :destroy]

  def show
    redirect_to edit_charge_path(@charge)
  end

  def edit
  end

  ...

end

我正在尝试获取控制器从redirect接受show的行为,但会将在浏览器地址窗口中输入某些URL的用户(例如http:\\www.mysite.com\charges\2\edit)重定向到其他用户位置(例如'\'

2 个答案:

答案 0 :(得分:0)

所以在你的控制器中你可以做到

def show
    respond_to do |format|
    format.html {redirect_to "/"}
    format.json { render json: @json }
  end
end

然后你可以设置你的其他动作来请求json(或者除了html之外的任何其他格式)。

答案 1 :(得分:0)

就像@Leito说的那样,浏览器会点击你的初始控制器动作,Rails会响应301或302以及一个Location头,它会告诉浏览器新的url命中。所以这两个请求都来自浏览器。另外,我不相信第二个请求中有标题或任何内容可以让您确定该请求是重定向的结果。

您可以看到用户是否被重定向的一种方法是为他们设置一个cookie,当他们点击您的重定向控制器操作时,然后在他们被重定向到的路由中检查该cookie。这会告诉你他们首先点击重定向路线。当然,您必须在最后一条路线中删除该cookie。

我认为你应该首先考虑其他选择,因为这看起来有点像hacky。我打赌你的问题有更好的解决方案。