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_path
和sort_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
因为没有/
在前面,路径是相对的而不是绝对的。