Ruby: Как передать все параметры и блоки, полученные одним методом, другому? - PullRequest
36 голосов
/ 13 января 2011

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

Вот так:

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, не поворачивая все параметрыобратно в то, на что они были похожи, прежде чем добрались до моего метода.

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

1 Ответ

67 голосов
/ 13 января 2011

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

def myhelper(*args, &block)
  link_to(*args, &block)
  # your code
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...