Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用ajax和rails调用没有路由的操作_Ruby On Rails_Ajax_Controller_Routes_Action - Fatal编程技术网

Ruby on rails 如何使用ajax和rails调用没有路由的操作

Ruby on rails 如何使用ajax和rails调用没有路由的操作,ruby-on-rails,ajax,controller,routes,action,Ruby On Rails,Ajax,Controller,Routes,Action,我有一个视图,其中包含一个表单,该表单应该通过ajax调用一个操作(home#search)。该操作没有路由,因为我想通过在浏览器中键入url(例如“www.example.com/home/search?q=bla”)来防止人们进行查询。该操作应限于来自rails应用程序本身的ajax请求 <%= form_tag("???", method: "get", remote: true) do %> <%= label_tag(:q, "Type in location:"

我有一个视图,其中包含一个表单,该表单应该通过ajax调用一个操作(home#search)。该操作没有路由,因为我想通过在浏览器中键入url(例如“www.example.com/home/search?q=bla”)来防止人们进行查询。该操作应限于来自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调用操作呢?或者有其他解决办法吗


提前感谢!:)

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

您可以使用这样的客户端

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

您将需要定义一个路由。但您也可以为AJAX调用提供一个临时访问令牌:


谢谢您的回答!你说得对:实际上,用户直接键入url是最不重要的。那么,有没有其他方法来限制对路由的访问,以便只有rails应用程序本身可以调用路由?没有,但根据您的应用程序,可能还有其他解决方法,例如添加只有您的应用程序知道的api键。键在html表单中不可见吗?谢谢!所以我猜这是一个类似于雷比策尔的答案,但线索是使每个客户的关键临时,以避免滥用。。。