[前][次][番号順一覧][スレッド一覧]

rails:3278

From: "jet.lfo" <jet.lfo@g...>
Date: Wed, 04 Nov 2009 13:02:39 +0900
Subject: [rails:3278] fields_for_nested_modelで吐き出してるid(hidden)を抑制するFormBuilderのサブクラスを作りたい

こんにちは。jet.lfoです。

#登録メールを思わずHTMLフォーマットのまま送ってしまったが(^-^; 登録されてるんだろうか。
#用語と概念がイマイチつかめてないので、説明がてんやわんやしてるところがありますが、よろしくおねがいします。

nested-attributesなフォームフィールドを構成するにあたって、
fields_for を使用すると、 new_record?==false なレコードの場合、
fields_forの記述箇所にid用のINPUT(type=hidden)タグが出力されてしまいます。

HTML上のフィールドのレイアウトをTABLEタグで構成する場合は、
TABLE-TRタグ間やTR-TDタグ間にこのINPUTが含まれると、invalidなXHTMLになってしまいます。

#https://rails.lighthouseapp.com/projects/8994/tickets/3416-fields_for-renders-invalid-html
#にそれっぽいのがあるので、2.3.5でなんとかなるんだろうか?

で、なんとかしようと

Ruby on Rails field_for Form Helper Problems
  http://stackoverflow.com/questions/1236416/ruby-on-rails-fieldfor-form-helper-problems
を参考に :without_hidden_primary_key が true なら id 付けない・・・としたつもり。

-----< ここから >-----
class HogeBuilder<ActionView::Helpers::FormBuilder
        :
    def fields_for_nested_model(name, object, args, block)
      options = args.extract_options!
      _without_hidden_primary_key = options[:without_hidden_primary_key] || false
      if _without_hidden_primary_key
        @template.fields_for(name, object, *args, &block)
      else
        super
      end
    end
    private :fields_for_nested_model
        :
end
-----< ここまで >-----

で、出なくはなった...が、別の問題に。

この書き方だと、入れ子になったブロックの引数(f.fields_for{|cf| ... } の cf 相当)
が、HogeBuilderのインスタンスじゃなく、ActionView::Helpers::FormBuilder のインスタンスになって
HogeBuilder で実装した別のメソッドが呼べなくなってしまいました。なぜ?
という辺りで、なにがどうしてどうなった、か判らなくなってしまいました。

これ、FormBuilderのサブクラスを引き継げなくなる原因はなんでしょうか?

以上。たすけて。よろしくお願いします。

--
ML: rails@r...
使い方: http://QuickML.com/

[前][次][番号順一覧][スレッド一覧]

->    3278 2009-11-04 05:02 [jet.lfo@g...        ] fields_for_nested_modelで吐き出してるid(hidden)を抑制するFormBuilderのサブクラスを作りたい
      3279 2009-11-04 15:27 ┗[dictav@g...         ]                                       
      3281 2009-11-05 02:21  ┣[jet.lfo@g...        ]                                     
      3328 2009-12-04 10:34  ┗[jet.lfo@g...        ]