2

標準の 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 を渡され、そのコンテキストで評価されます。

  1. ブロック内の複数のステートメントを使用して、この方法でレンダリング ヘルパー メソッドをテストすることはできないというのは正しいですか?
  2. 私が正しければ、完全なアプリのコンテキストでヘルパーが行うのと同じことを行う仕様を作成するための、最もハッキリしない方法は何でしょうか? ERB 文字列を作成し、何らかの方法でヘルパーに渡してレンダリングしますか?
4

1 に答える 1

1

これを解決しましたか?ブロック内の最後のステートメントが返されただけなのか知りたいです。f.text_field/f.select の順序を変更して、何が返されるかを確認しましたか? もしそうなら、それらを追加するだけです:

rendered_form = helper.my_custom_form_for(@account, :url => '/accounts') do |f|
  f.inputs do
    f.text_field('name', :size => 30) +
    f.select('locale', options_for_select([%w(Australia en-AU), %w(UK en-GB)]))
  end
end
于 2013-05-30T17:28:03.267 に答える