如何在Rails中创建REST服务器?

时间:2013-01-25 03:31:59

标签: ruby-on-rails ruby rest

我正在尝试使用Rails服务器创建RESTful服务。我在网上看过教程,显然我做错了。我的错误是CORS问题。我有一个用户模型和控制器。在我的用户控制器中,我正在尝试更改标头,以允许任何网站从服务器提取信息。

class UsersController < ApplicationController
  def options
    if access_allowed?
      set_access_control_headers
      head :ok
    else
      head :forbidden
    end
  end

  private
    def set_access_control_headers
      # headers['Access-Control-Allow-Origin'] = request.env['HTTP_ORIGIN']
      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'
    end


    def access_allowed?
      allowed_sites = '*' #you might query the DB or something, this is just an example
      return allowed_sites.include?(request.env['HTTP_ORIGIN'])
      return true
    end
end

我还设置了我的路由,所以当服务器被命中时,它会转到'options'动作。

  resources :users, :only => [:create]
  match '/users', :controller => 'users', :action => 'options', :via => :get

我在我的开发机器上创建了一个html页面,我只是从Chrome打开它(我不知道这是否是一个问题。)当我试图抓住用户时,我得到了

OPTIONS http://www.*****.com:3000/users 404 (Not Found) jquery.js:3
XMLHttpRequest cannot load http://www.****.com:3000/users. Origin file:// is not allowed by Access-Control-Allow-Origin.

有人请让我知道我做错了什么,或者指出我可以帮助我的方向。

1 个答案:

答案 0 :(得分:2)

您的路线指定接受GET请求(:via => :get),但看起来您的实际请求是OPTIONS请求。

尝试将match更改为:

match '/users', :controller => 'users', :action => 'options', :via => :options

另请注意,您的操作名称不一定是options,也可能是您想要的名称。

供参考,以下是OPTIONS请求should return

的内容
  

返回服务器支持指定URL的HTTP方法。这可以通过请求'*'而不是特定资源来检查Web服务器的功能。

这里有an article响应Rails中的选项请求。