防止对Rails控制器方法的直接URL访问

时间:2011-01-07 20:10:39

标签: ruby-on-rails

我有一个特殊的Rails控制器方法,当我在前端执行javascript ajax请求时返回一些JSON。

但是,我想阻止用户直接输入url,这会显示该方法返回的JSON。我还想要仍然能够执行我的ajax请求。我怎么能这么做呢?谢谢!

4 个答案:

答案 0 :(得分:3)

只是想一想......你可以在respond_to块中为html请求做一些自定义的事情。

respond_to do |format|
  format.html { ... } # give them a 404 response?
  format.js { render :json => @obj }
end

或者你的html.erb模板可能只显示某种拒绝访问的消息。那你就是这个:

respond_to do |format|
  format.html
  format.js { render :json => @obj }
end

答案 1 :(得分:2)

你可以用

包裹你的行动
    if request.xhr?
       ...
    end

答案 2 :(得分:2)

rails3控制器中的respond_to过滤器非常可爱。

YourJsonController < ApplicationController

  respond_to :json

  def index
    #non-json requests will receive a 406 error
  end

end

答案 3 :(得分:0)

routes.rb中,您可以添加:via =&gt; :post,所以你的URL只接受POST请求。请参阅http://guides.rubyonrails.org/routing.html

上的“HTTP动词约束”