2011-01-13 6 views
32

私は、レールのlink_toタグにHTML属性を追加するヘル​​パーを作成しています。だから、私の考えは、私のヘルパーメソッドは、それに渡されたパラメータやブロックを受け入れ、同じパラメータでlink_toを呼び出し、返されるものに属性を追加し、呼び出し元に結果を返さなければならないということです。このようRuby:あるメソッドで受け取ったすべてのパラメータとブロックを別のメソッドに渡すにはどうしたらいいですか?

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に受信したものを渡すために(つまり、コードや条件分岐の多くを伴わない)いかなる方法はなさそうですすべてのパラメータは、自分のメソッドに到達する前の状態に戻ります。

この問題の「Rubyのような」解決策がありますか?

+2

注ルビー2.0に、名前付き引数を転送することもを持っていること... – Ajedi32

答えて

61

*&をメソッド呼び出しに使用して、配列を引数のリストに戻し、procsをブロックに戻すことができます。だから、あなたはこの行うことができます。

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

を私は私はあなたが間違っていたと確信していた:-)今愚かな感じ、と私はいくつかを書いていましたそれを証明するためのサンプルコード、そしてもちろん正しいものでした。ありがとう! – marcusM

+5

このアプローチは、Ruby 2.0の名前付き引数で動作しますか? – Ajedi32

+0

@ Ajedi32はい、それらはハッシュに集められます。 'foo(:bar、baz: 'qux')'は '[:bar、{:baz =>" qux "}]'になります。 –

関連する問題