28

隠しフィールドを作成し、1つのヘルパーでリンクを作成してから、両方をerbに出力したいと思います。

<%= my_cool_helper "something", form %>

の結果を出す必要があります

link_to "something", a_path
form.hidden_field "something".tableize, :value => "something"

ヘルパーの定義はどのようになりますか?link_toとform.hidden_​​fieldの詳細は実際には重要ではありません。重要なのは、2つの異なる呼び出しからの出力をどのように返すかです。

4

6 に答える 6

25

これを行うにはいくつかの方法があります。

link_toなどの既存のRailsヘルパーは、文字列を出力するだけであることを忘れないでください。文字列を連結して返すことができます(単純な場合は、これがほとんどの場合に行われます)。

例えば:

link_to( "something", something_path ) +  #NOTE THE PLUS FOR STRING CONCAT
  form.hidden_field('something'.tableize, :value=>'something')

より複雑なことをしている場合は、そのコードを部分的に配置して、ヘルパーにを呼び出させることができますrender :partial

それよりも複雑なことをしている場合は、errtheblogのblock_to_partialヘルパーを確認することをお勧めします。これはかなりクールです。

于 2008-09-21T21:17:15.813 に答える
11

これまでのところ、私が思いついた最高のものは次のとおりです。

def my_cool_helper(name, form)
  out = capture { link_to name, a_path }
  out << capture { form.hidden_field name.tableize, value => 'something' }
end

もっと良い方法はありますか?

于 2008-09-21T21:17:05.970 に答える
3

を使用してsafe_joinいます。

Orion Edwards's Answer+に示されているように、私は通常、単に連結することを好みますが、最近発見した別のオプションを次に示します。

safe_join( [
  link_to( "something", something_path ),
  form.hidden_field( "something".tableize, value: "something" )
] )

すべての要素とそれらの要素の結合を明示的にリストするという利点があります。

+要素が長いと、記号が行末で失われる可能性があることがわかりました。さらに、いくつかの要素を連結している場合は、次の読者にとってより明白になるように、このように配列にリストすることがわかります。

于 2020-01-20T05:14:25.723 に答える
2

concat文字列以外の他の出力をバッファリングする場合は、代わりに を使用できます+。これを参照してください - http://thepugautomatic.com/2013/06/helpers/

于 2016-01-26T10:45:10.453 に答える