標準の Rails FormHelper をオーバーライドして、(ほぼ Bootstrap ベースの) 形式でフォーム要素を吐き出すようにしました ( http://www.likeawritingdesk.com/posts/very-custom-form-b uilders-in-rails の後)。 )。
問題なく動作しますが、仕様を書くのは難しいです。私は次のような仕様を使用しています:
rendered_form = helper.my_custom_form_for(@account, :url => '/accounts') do |f|
f.inputs do
# This isn't rendered
f.text_field 'name', :size => 30
# This is rendered
f.select 'locale', options_for_select([%w(Australia en-AU), %w(UK en-GB)])
end
end
レンダリングされるものには select タグが含まれますが、テキスト フィールド タグは含まれません。これは、ブロック内の各ステートメントの戻り値ではなく、ブロックの戻り値を追加して、ActionView がブロックを処理する方法が原因であると思われます。明らかに、アプリ内のコンテキストで使用される場合、ヘルパー メソッドはいくつかの ERB を渡され、そのコンテキストで評価されます。
- ブロック内の複数のステートメントを使用して、この方法でレンダリング ヘルパー メソッドをテストすることはできないというのは正しいですか?
- 私が正しければ、完全なアプリのコンテキストでヘルパーが行うのと同じことを行う仕様を作成するための、最もハッキリしない方法は何でしょうか? ERB 文字列を作成し、何らかの方法でヘルパーに渡してレンダリングしますか?