0

ドロップダウンリストでユーザーが選択した値に基づいて、フォームの残りの部分がパーシャルで表示されるフォームがあります。

モデル:

Book has many supplierdetails
Supplierdetails belongs to Book

フォームコード

<% fields_for @book do |f| %>


 Catalogue Number: <%= f.text_field :BK_CAT_NUM %>

  <% f.fields_for :supplierdetails do |builder| %>
   Supplier Type:
    <%= builder.select(:SUP_TYPE, 
         [['A', 'A'],
          ['B', 'B'],
        ],{ :prompt => "Please select"}       
      ) %>


    <%= observe_field("book_supplierdetails_attributes_0_SUP_TYPE", 
      :url => { :controller => 'books', :action => :display_ab_details },
      :with => "'id='+value") %>

    <div id="div1">  </div>



  <% end %>
<% end %>

コントローラ方式

  def display_ab_details
    supplier_type = params[:id]
    if supplier_type == "A"
      render :update do |page|
        page['div1'].replace_html :partial => 'books/test_partial'
      end
    end
  end

books / _test_partial.html.erb

Production Method: </label> <%= builder.select(:SUP_PROD_METHOD, [
        ['prod_1', 'prod_1'],
        ['prod_2', 'prod_2'],
      ],{ :prompt => "Please select"}
    ) %>

パーシャルは表示されませんが、フォームオブジェクトが原因だと思います。

'books / _test_partial.html.erb'にプレーンテキストが含まれている場合は、正しく表示されます。

rjsを介して部分的にレンダリングする場合、フォームオブジェクトをどのように処理しますか?

4

1 に答える 1

1

あなたの質問に対する実際の答えはありませんが、RJS は v3.1 以降 Rails に含まれていないため、時流に乗って、目立たない JavaScript を使用することをお勧めします。このようなことをします。ほとんどの Rails 開発者は最近 RJS を使用していないため (実際、以前は RJS を使用していた人も多くはありませんでした)、助けを得やすくなります。

それに関するいくつかの情報はここにあります: http://wowkhmer.com/2011/09/19/unobtrusive-ajax-with-rails-31/

また、部分的にビルダーを使用しようとしているため、おそらく動作しません。そんなことはできません。fields_for を使用するか、単に入力 HTML を自分で出力する必要がありますが、入力に正しい名前を付けるように注意してください。また、サーバーログを調べると、ビルダーを使用しようとしている行にエラーが表示されると確信しています。Rails では、後で AJAX リクエストを介してレンダリングされるパーシャルで元のフォームのビルダーを使用する方法はまったくありません。

Ryan があなたと同じようなことをする Railscasts もありますが、彼は RJS を使用していません。このエピソードかそれに関連した何かだと思います: http://railscasts.com/episodes/75-complex-forms-part-3

于 2012-10-31T17:39:59.943 に答える