Подтвердить что ты не робот

Ruby: Как передать все параметры и блоки, полученные одним методом другим?

Я пишу помощник, который добавляет атрибут HTML к тегу link_to в rails. Итак, я считаю, что мой вспомогательный метод должен принимать любые переданные ему параметры или блоки, вызывать ссылку с теми же параметрами, добавлять атрибут к возвращаемому и возвращать результат вызывающему.

Вот так:

def link_to(*args, &block)
  ... rails code in link_to ...
end

def myhelper(*args, &block) # Notice that at this point, 'args' has already
  link_to()                 # become an array of arguments and 'block' has
  ... my code ...           # already been turned into a Proc.
end

myhelper() # Any arguments or blocks I pass with this call should make
           # it all the way through to link_to.

Итак, как вы можете видеть, кажется, что нет способа (который не включает много кода и условного разветвления) передать то, что myhelper получил для link_to, не возвращая все параметры обратно в то, что они выглядели раньше они добрались до моего метода.

Есть ли еще более "рубиноподобное" решение этой проблемы?

4b9b3361

Ответ 1

Вы можете использовать * и & в вызовах методов, чтобы снова включить массивы в списки аргументов и выполнить возврат к блокам. Поэтому вы можете просто сделать это:

def myhelper(*args, &block)
  link_to(*args, &block)
  # your code
end