Невозможно переопределить / обезьяна исправить метод рельсов с помощью рельсов 3.1.3 - PullRequest
0 голосов
/ 11 марта 2012

Я пытаюсь переопределить метод активного ресурса, как описано в этом вопросе: Удалить расширение .xml из запроса ActiveResource и вот это: Я хочу использовать API REST, мне не удаетсяустановить активный ресурс для его использования

Для этого я протестировал:

Создание в папке / config / в itializers / моего приложения файла с именем active_resource.rb со следующим кодом:

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

Добавление метода внутри моей модели.Вот мой код модели:

class Player < ActiveResource::Base
  def element_path(id, prefix_options = {}, query_options = nil)
    check_prefix_options(prefix_options)

    prefix_options, query_options = split_options(prefix_options) if query_options.nil?
    "#{prefix(prefix_options)}#{collection_name}/#{URI.parser.escape id.to_s}#{query_string(query_options)}"
  end
  self.site = "http://ws.maniaplanet.com/"
  self.user="**********"
  self.password="*********"
end

Чтобы проверить переопределение моего пользовательского кода, я попытался использовать

puts  "called this method"

или

ActionController::Base.logger.info "called this method"

.сработало.

Почему я не могу переопределить путь к элементу метода rails?

UPDATE

Попытка добавить active_resource.rb дополнительно после раскомментирования строки config.autoload_paths += %W(#{config.root}/extras) в приложении.rb.Без изменений

Если я поместил файл base.rb с моим классом и методом в lib / active_resource /, это сломает мое приложение.Я больше не могу запускать сервер rails

1 Ответ

1 голос
/ 12 марта 2012

Вы должны переопределить метод класса, а не экземпляр один, поэтому:

class Player < ActiveResource::Base

  def self.element_path(id, prefix_options = {}, query_options = nil)
    #...
  end

end

Этого будет достаточно, если вы собираетесь делать запросы только от Player модели.

Если выЕсли вы хотите, чтобы такое поведение было для любой модели, вам следует обезьяна заплатить ActiveResource::Base, опять же, метод класса.

# config/initializers/active_resource_patch.rb
class ActiveResource::Base

  def self.element_path(id, prefix_options = {}, query_options = nil)
    #...
  end

end
...