Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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 重写Rails 2中的资源路由_Ruby On Rails_Ruby_Http_Http Headers_Url Routing - Fatal编程技术网

Ruby on rails 重写Rails 2中的资源路由

Ruby 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

我试图仅为选项请求覆盖资源的路由。我需要这个来正确获得跨域照片上传请求

routes.rb

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
,请做出选择。谢谢各位,我设法解决了:)。关于头部你是对的:也可以。