Ruby on rails 重写Rails 2中的资源路由
我试图仅为选项请求覆盖资源的路由。我需要这个来正确获得跨域照片上传请求 routes.rbRuby on rails 重写Rails 2中的资源路由,ruby-on-rails,ruby,http,http-headers,url-routing,Ruby On Rails,Ruby,Http,Http Headers,Url Routing,我试图仅为选项请求覆盖资源的路由。我需要这个来正确获得跨域照片上传请求 routes.rb map.resources :photos map.connect '/photos', :controller => 'photos', :action => 'options_stuff', :conditions => {:method => :options } 照片\u controller.rb def options_stuff puts "got t
map.resources :photos
map.connect '/photos', :controller => 'photos',
:action => 'options_stuff', :conditions => {:method => :options }
照片\u controller.rb
def options_stuff
puts "got to options@!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
set_access_control_headers
head :ok
render :nothing => true, :status => 200
end
def set_access_control_headers
headers['Access-Control-Allow-Origin'] = '*'
headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
headers['Access-Control-Max-Age'] = '1000'
headers['Access-Control-Allow-Headers'] = '*,x-requested-with'
puts "headers are #{headers}"
end
然而,它从未到达我需要的控制器。我做错了什么
顺便说一句,我下面有两篇关于如何做的文章:
更新
在经历了很多痛苦之后,我放弃了控制器的想法,尽管它确实像答案所说的那样起作用。相反,有人建议使用如下所示的before过滤器:
赛前
before_filter :set_access_control_headers, :only => [:index]
def set_access_control_headers
if !request.put? && !request.post? && !request.delete? && !request.get?
headers['Access-Control-Allow-Origin'] = '*'
headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
headers['Access-Control-Max-Age'] = '1000'
headers['Access-Control-Allow-Headers'] = '*,x-requested-with'
puts "headers are #{headers}"
render :nothing => true, :status => 200
return false
end
end
我相信路线的优先级是从上到下排列的,最上面的是最高优先级,最下面的是最低优先级。所以考虑一下切换你的路线:
map.connect '/photos', :controller => 'photos',
:action => 'options_stuff', :conditions => {:method => :options }
map.resources :photos
在您的路径中,操作的名称是错误的。这不应该是选项吗?谢谢你。但那不是它的
printf
在控制器中调试可能不是最好的方法,但至少你对此感到兴奋。@tadman当时更像是在对我的机器大喊大叫:)。我的调试器也很糟糕。第一个定义具有最高优先级。遗憾的是,这与Ruby相反,因为Ruby的最后一个仍然存在。现在我得到了一个双渲染,因为资源也在尝试渲染:ActionController::DoubleRenderError in optionController#options_stuff
不确定为什么要在该方法中调用head
<代码>渲染使用:状态
应该足够了。是的头部:ok
类似于渲染:nothing=>true,:status=>200
,请做出选择。谢谢各位,我设法解决了:)。关于头部你是对的:也可以。