Помогите с ruby ​​и def response_to? (Метод, * args, & block) в библиотеке - PullRequest
0 голосов
/ 10 августа 2011

У меня есть драгоценный камень, который имеет дело с изображениями, которые модифицируются. Я хочу изменить его, чтобы обновить старое изображение, но мне нужно иметь возможность получить идентификатор объекта.

Сейчас он использует следующий код:

def respond_to?(method,*args, &block)
puts ("++++METHOD #{method.to_s} ARGS #{args} BLOCK #{block}")
args.each do |value|
  puts ("ARGS #{value}")
 end

но я не знаю, как получить идентификатор от того, что я передаю, и при этом я не знаю, как передать идентификатор, я пытался @asset.image.s_245_245(:asset_id=>@asset.id) безуспешно. Аргс ничего не возвращает. Что я делаю не так?

Обновление: Я сейчас читаю http://www.simonecarletti.com/blog/2009/09/inside-ruby-on-rails-extract_options-from-arrays/

Обновление: Это тоже вернулось пустым.

1 Ответ

2 голосов
/ 11 августа 2011

Ваш вопрос очень неясен.Как метод respond_to? связан с вашей проблемой с идентификатором объекта?

Я догадываюсь , что на самом деле вы хотели переопределить method_missing, потому что теперь вы не вызываете respond_to?или это не показано в ваших примерах.

Если вы не определили такой метод, вызов image.s_245_245 вызовет method_missing (в объекте image) с параметрамивы использовали для respond_to?.

Существует правило, которое гласит, что если вы используете method_missing для обработки некоторых вызовов, то вы должны также изменить respond_to? и сделать еговозвращает true, когда запрашивается методы, обрабатываемые method_missing.

Что касается идентификатора объекта, существует две возможности:

  • Каждый объект в ruby ​​отвечает на .object_id (который возвращаетвнутренний идентификатор каждого объекта)
  • Объекты ActiveRecord отвечают на .id (который является первичным ключом в базе данных).

Это просто дополнительная заметка, потому что яПредположим, что если вы начнете экспериментировать с method_missing вместо respond_to?, вы будете знать, какиетот, который вы хотите.

...