Ruby/Rails — использовать веб-сервис с ActiveResource

только приступая к работе с Rails, я хотел бы использовать веб-сервис (используя ActiveResource), который имеет следующую конечную точку:

GET /user?some_header=XYZ

Это мой класс ActiveResource:

    class User < ActiveResource::Base
      self.site = "url"
      set_collection_name 'user'  #avoid pluralization within the url
    end

Как теперь будет выглядеть вызов указанной выше конечной точки?

Я пытался

    User.get('', headers={:some_header => "XYZ"})

но я получаю 404 (запрос работает, когда я запускаю его вручную).


person zero-divisor    schedule 14.02.2012    source источник


Ответы (2)


Пытаться

User.all(:params=>{:some_header => "XYZ"})

Если вы хотите избежать форматирования своего пути, вы можете изменить базовый метод collection_path.

   def collection_path(prefix_options = {}, query_options = nil)
        prefix_options, query_options = split_options(prefix_options) if query_options.nil?
        "#{prefix(prefix_options)}#{collection_name}.#{format.extension}#{query_string(query_options)}"
    end

to

   def collection_path(prefix_options = {}, query_options = nil)
        prefix_options, query_options = split_options(prefix_options) if query_options.nil?
        "#{prefix(prefix_options)}#{collection_name}#{query_string(query_options)}"
      end
person Fivell    schedule 14.02.2012
comment
Пробовал, получая странную ошибку undefined method `collect!' для #‹Hash:0x48bbe30› . Когда я смотрю на файл журнала, кажется, что правильный запрос построен. - person zero-divisor; 15.02.2012

Нашел проблему. Хотя я указал пустой путь в своем методе get, Rails внутренне добавил «.json», поэтому созданный URL-адрес был

/пользователь/.json?some_header=XYZ"

Как я это исправил

     User.collection_name = ""
     User.get('user', headers={:some_header => "XYZ"})

Кто-нибудь знает более чистое решение?

person zero-divisor    schedule 15.02.2012