Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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
Javascript 我可以为js ajax调用使用路由路径吗?_Javascript_Ruby On Rails_Ajax_Ruby On Rails 4_Url Routing - Fatal编程技术网

Javascript 我可以为js ajax调用使用路由路径吗?

Javascript 我可以为js ajax调用使用路由路径吗?,javascript,ruby-on-rails,ajax,ruby-on-rails-4,url-routing,Javascript,Ruby On Rails,Ajax,Ruby On Rails 4,Url Routing,我有一个ajax调用,可以在.js文件中使用: ... update: function(){ $.ajax({ url: '/groups/order_links', ... 但我更愿意走这条路 我设置了文件扩展名.js.erb,并尝试添加: ... update: function(){ $.ajax({ url: "#{order_links_groups_path}", ... 或 但无论哪种情况,我都会得到一个404-[HTTP/1.1 4

我有一个ajax调用,可以在
.js
文件中使用:

...
update: function(){
   $.ajax({
     url: '/groups/order_links',
...
但我更愿意走这条路

我设置了文件扩展名
.js.erb
,并尝试添加:

...
update: function(){
   $.ajax({
     url: "#{order_links_groups_path}",
     ...

但无论哪种情况,我都会得到一个404-
[HTTP/1.1 404找不到76ms]

帖子http://localhost:3000/groups/49

rake路由
显示我的路由包括:

                   ...
                   PUT      /groups/:group_id/links/:id(.:format)      links#update
                   DELETE   /groups/:group_id/links/:id(.:format)      links#destroy
order_links_groups POST     /groups/order_links(.:format)              groups#order_links
            groups GET      /groups(.:format)                          groups#index
                   POST     /groups(.:format)                          groups#create
         new_group GET      /groups/new(.:format)                      groups#new
        edit_group GET      /groups/:id/edit(.:format)                 groups#edit
定义为:

resources :groups do
  resources :links
  collection do
    post 'order_links'
  end 
end 
组\u控制器
具有

class GroupsController < ApplicationController

  ...
  def order_links
    params[:link].each_with_index do |id, index|
      Link.where(id: id).update_all(['position = ?',index+1])
    end 
    render :nothing => true
  end 
  ...
类组控制器true
结束
...
Rails 4.1

“#{}”
用于Coffeescript中的字符串插值,因此我假设这是一个错误。我假设发出此ajax请求的url是
http://localhost:3000/groups/49
因为如果您没有传入正确的url,它将使用当前路径

将在ruby中查找变量。这会起作用,但编译assets目录中的JavaScript文件时没有使用应用程序上下文。意思是,
order\u links\u groups\u path
将未定义

这里的答案应该有帮助:


网址:“

首先,让我为您解释一些事情:

--

Mime类型

控制器级别的Rails进程(不是中间件)

这意味着,如果希望通过ajax的
js
mime类型请求资源,则必须在控制器中定义其处理,而不是路由结构

您将能够阅读更多关于Rails如何处理mime类型的内容:

如果客户机需要HTML,我们只需将它们重定向回此人 列表如果他们想要JavaScript,那么这是一个Ajax请求,我们 呈现与此操作关联的JavaScript模板。最后,如果 客户机需要XML,我们将创建的人呈现为XML,但使用 twist:我们还在呈现的XML中包含此人的公司,因此 你会得到像

这意味着,如果您希望处理JS响应,则可以执行以下操作:

#app/controllers/groups_controller.rb
class GroupsController < ApplicationController
   def order_links
      ...
      respond_to do |format|
         format.js 
         format.html
      end
   end
end

这将路由javascript请求,允许您根据需要在控制器中处理mime类型

似乎是一个很好的解决方案,但是我得到了#(in/home/durrantm/Dropnot/webs/rails\u apps/linker/app/assets/javascripts/sortable\u hook.js.erb)的
未定义的局部变量或方法'order\u links\u groups\u path'。我还尝试了
order\u links\u groups\u url
并得到了相同的错误。顺便说一句,我确实更改了控制器,添加了格式块。仅供参考,我正在使用
.js.erb
url:
是否与
.js.erb
模板相同(您的示例是coffeescript)?我也尝试过,但它给出了相同的错误。嘿,Michael,你有时间聊一下吗?我验证了这在RubyonRails4.1应用程序上是有效的。
<% url = MyRailsApp::Application.routes.url_helpers %>
url: "<%= url.order_links_groups_url %>"
#app/controllers/groups_controller.rb
class GroupsController < ApplicationController
   def order_links
      ...
      respond_to do |format|
         format.js 
         format.html
      end
   end
end
#app/assets/javascripts/application.js.coffee
update: function(){
   $.ajax({
     url: <%= order_links_groups_path %>,
     ...