【问题标题】:How to call an action without a route with ajax and rails如何使用 ajax 和 rails 调用没有路由的操作
【发布时间】:2013-07-11 18:53:15
【问题描述】:

我有一个视图,其中包含一个应该通过 ajax 调用操作 (home#search) 的表单。该操作没有路线,因为我想阻止人们通过在浏览器中输入 url(例如“www.example.com/home/search?q=blablabla”)来进行查询。该操作应仅限于来自 rails 应用程序本身的 ajax 请求。

<%= form_tag("???", method: "get", remote: true) do %>
  <%= label_tag(:q, "Type in location:") %>
  <%= text_field_tag(:q) %>
  <%= submit_tag("Search") %>
<% end %>

那么如何在没有路由的 Rails 中通过 ajax 调用操作?或者有没有其他解决方案?

提前致谢! :)

【问题讨论】:

    标签: ruby-on-rails ajax controller routes action


    【解决方案1】:

    你可以使用这样的东西,

     def new
      @user = User.new
       respond_to do |format|
        format.html { render text: "Error", status: 404 }
        format.js
       end
     end
    

    【讨论】:

      【解决方案2】:

      您需要定义一条路线。但您也可以为您的 AJAX 调用提供临时访问令牌以供使用:

      http://railscasts.com/episodes/352-securing-an-api?view=asciicast

      【讨论】:

      • 谢谢!所以我想这与 Rebitzele 的答案类似,但线索是让每个客户的密钥都是临时的,以避免滥用......
      【解决方案3】:

      ajax 调用肯定需要路由。但是,您可以发出 POST 请求而不是 GET 请求,这样用户就无法将其输入到他们的浏览器中。但是,从技术上讲,他们仍然可以使用 CURL 等客户端发出这样的请求。

      【讨论】:

      • 感谢您的回答!你是对的:实际上直接输入 url 的用户是最小的问题。那么有没有其他方法可以限制对路由的访问,以便只有 rails 应用程序本身才能调用该路由?
      • 并非如此,但根据您的应用程序,可能还有其他解决方法,例如添加只有您的应用程序知道的 api 密钥。
      • 在 html 表单中不会显示密钥吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      相关资源
      最近更新 更多