Ruby / Rails中的URL

我想对我的路线使用相同的AJAX调用。 我怎么设置url ??

路线:

put :sort, :path => 'activities/sort', :controller => 'activities' put :sort, :path => 'articles/sort', :controller => 'articles' 

JS:

 $.ajax({ type: "PUT", url: 'activities/sort', # I wanna change this line data: {ids:newOrder}, dataType: "html", error: function() { alert('Positions has not been saved.'); $('#sortable').sortable('cancel'); } }); 

我想这样的事情:

 url:  

但它重定向到’localhost:3000 / sort’但我想’localhost:300 / current_controller / sort’

您的路线生成以下内容

 sort PUT /activities/sort(.:format) activities#sort 

如在这个SO问题中提到的那样

Sprockets正在评估Rails应用程序上下文之外的ERB

因此, .js.erb文件默认无权访问URL帮助程序方法; 必须明确包括它们。

 <% # at the top of your file somewhere url = Rails.application.routes.url_helpers %> // ... url: <%= url.sort_path %>, // ... 

我使用这样的东西:

 def javascript_variables(variables = nil) @inline_js_variables ||= {} @inline_js_variables.merge!(variables) and return if !variables.nil? output = '' @inline_js_variables.each do |variable, value| output << "var #{variable} = #{value.to_json};\n" end output.strip.html_safe end 

您可以将上述内容放在app/helpers/application_helper.rb 。 然后在ApplicationController ,您可以将它放在类的顶部。

 helper :all 

现在,在你的行动中,你可以做类似的事情

 def your_activities_action javascript_variables({ ajax_route_path: sort_activities_path }) end def your_articles_action javascript_variables({ ajax_route_path: sort_articles_path }) end 

app/views/layouts/application.html.erb您可以将以下内容放在

  

最后,在.js文件中,您可以在url参数中使用ajax_route_path

 url: ajax_route_path, 

根据这个答案和我的另一个答案,你应该能够把你想要完成的事情拼凑起来。 例如,如果您需要同一操作中包含sort_activities_pathsort_articles_path

 def your_articles_action javascript_variables({ ajax_activities_route_path: sort_activities_path, ajax_articles_route_path: sort_articles_path }) end 

然后修改您的Javascript文件以相应地使用每个文件(例如,通过将Ajax方法包装在函数中的Question中,接受url作为参数的路由)

尝试将/放在前面,如下所示:

 '/activities/sort' 

否则,正如你所说,它会使用/current_controller/activities/sort因为没有/在前面,路径是相对的而不是绝对的。