Суффикс ActiveResource

#ruby-on-rails #api #rest #activeresource

#ruby-on-rails #API #остальное #activeresource

Вопрос:

При использовании ActiveResource вызов MyObject.find(id) получает «[self.site]/[self.prefix]/:id.[self.format]». Однако API, к которому мы обращаемся, настроен немного по-другому. Вместо id.file_type нам нужно получить доступ к «[self.site]/:id/[self.suffix].[self.format]».

ie: получить http://api_path/:id/tool.json

Есть ли какой-либо способ настроить activeresource для этого сценария? Я мало что нахожу в документации.

Ответ №1:

ActiveResource::Base.element_path это метод, который создает путь:

 def element_path(id, prefix_options = {}, query_options = nil)
  prefix_options, query_options = split_options(prefix_options) if query_options.nil?
  "#{prefix(prefix_options)}#{collection_name}/#{URI.escape id.to_s}.#{format.extension}#{query_string(query_options)}"
end
  

Я бы создал класс, который переопределяет element_path, что-то вроде этого:

 class CustomApiPath < ActiveResource::Base
  def element_path(id, prefix_options = {}, query_options = nil)
    prefix_options, query_options = split_options(prefix_options) if query_options.nil?
    "#{prefix(prefix_options)}#{URI.escape id.to_s}/#{collection_name}.#{format.extension}#{query_string(query_options)}"
  end
end
  

(предупреждение: не проверено) и тогда другие модели ActiveResource будут наследоваться от CustomApiPath, а не ActiveResource::Base.