7

特定のAJAXリクエストを受けてフォーム要素をdinamically作成しようとしています。ActionView :: Helpers :: FormBuilderを部分的に渡す

これは私の設定です:

ビュー:

<%= link_to 'Next', check_unique_id_students_path, :remote => true %> 

    <div id="guardian_student_details"></div> 

コントローラー:

def check_unique_id 
    @student = Student.new 
    @this_form = ActionView::Helpers::FormBuilder.new(:student, @student, @template, {}, proc{}) 
    end 

JS:

jQuery("#guardian_student_details").html("<%=escape_javascript(render :partial => "student_details", :locals => { :s => @this_form }) %>"); 

部分:

デバッグ目的のために
<% puts s.text_field :first_name %> 
<% puts s.field_helpers %> 

は、私は私の部分の先頭に次の行を配置:

<% puts s.class.to_s %> 
<% puts s.object.to_s %> 

これはアウト出力します。これは動作するはず

ActionView::Helpers::FormBuilder 
Student 

。 "s" は、私はちょうど2を検証NIL何かであることを意味する

_app_views_students__student_details_html_erb__2485891544130782916_2214680440' app/views/students/check_unique_id.js.erb:2:in _app_views_students_check_unique_id_js_erb__3504800328150418937_2214933160' 中:

ActionView::Template::Error (undefined method `text_field' for nil:NilClass): 
1: <% puts s.class.to_s %> 
2: <p> 
3: <%= s.text_field :first_name, :class => 'text_input is_empty' %> 
4: <%= s.label :first_name %><strong>*</strong> 
5: </p> 
6: 

アプリ/ビュー/学生/ _student_details.html.erb:3しかし、次のエラーを与えているがレール前の行誰にもアイデアはありますか?私はこれがコントローラで初期化された "@テンプレート"変数と関係があるかどうかはわかりません。私は周りに遊んで、事実上何かを受け入れ、もし印刷されればそれは無しです。 ご協力いただければ幸いです。おかげ

最後の注意:コンソールでこれを試してみてくださいAJAX update of accepts_nested_attributes_for partials

答えて

0

s = ActionView::Helpers::FormBuilder.new(:student, @student, @template, {}, proc{}) 
s.text_field :first_name 

あなたは、同じエラーになります

私はこれを実装しようとしました。私は正確な間違いがわからなくてもform_builderオブジェクトの作成から問題が発生したと思います...

あなたのソリューションは少し複雑に思えます。このソリューションを試すことができます:

#html.erb 
<% form_for @student do |f| %> 
    <div id='guardian_student_details' class='hide-this-block'> 
    <%= render :partial => "student_details", :locals => { :s => f }) %> 
    </div> 
<% end %> 

#js 
jQuery("#guardian_student_details").show(); 

一般的に、私はjavascriptとrubyを分離しておくことをお勧めします。

+0

ありがとうAlexandre、私はこの作品を知っていますが、FormBuilderで提案された方法でそれを行うことができれば、私の機能に大きなメリットがあります。 – jalagrange

+0

これはRails 2.3または3+ですか? @template変数がRails 3に存在するかどうかはわかりません。あなたが言及したAJAX更新記事では、そのメソッドを投稿してからコードを変更しました。最終的には、既存のインデックスを取得して増分するのではなく、変更したバージョンのhttp://media.pragprog.com/titles/fr_arr/multiple_models_one_form.pdfを使用しました(特にネストを別のレベル)。 – Pasted

+1

こんにちは、これはレール3.1です。あなたのコメントとリンクをありがとう。 @templateの代わりにview_contextを使ってソリューションを実装しようとしましたが、次のように壊れます:NameError:未定義のローカル変数またはmainメソッドの 'view_context 'メソッド:Object – jalagrange

4

私は、view_contextはRails 3.1では動作しないことを発見しました。代わりに、FormBuilderオブジェクトを作成するときに 'self'を試してください。

S = ActionView ::ヘルパー:: FormBuilder.new(:学生、@student、自己、{}、PROC {})コントローラのフォームビルダーを構築するために必要とする人のため

4

は、view_contextがまだ動作そこ。 Railsを使う4.1。4:

@object = Object.new 
@f = ActionView::Helpers::FormBuilder.new(:object, @object, view_context, {}) 
関連する問題