2012-10-31 56 views
0

我有一個表單,其中基於用戶在下拉列表中選擇的值,表單的其餘部分通過部分顯示。當通過rjs渲染部分時處理表單對象

型號:

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 

本書籍/ _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渲染部分時如何處理表單對象?

回答

1

對於你的問題,我沒有真正的答案,但由於自從3.1版本以來,RJS已經不在Rails中,所以你最好跳過這個潮流並且使用不顯眼的JavaScript來處理這樣的事情,就像現在這樣做這種事情的首選方式。獲得幫助也會更容易,因爲大多數Rails開發人員現在都不使用RJS(實際上,很多人都沒有使用它)。

上的一些信息可以在這裏找到:http://wowkhmer.com/2011/09/19/unobtrusive-ajax-with-rails-31/

而且,你可能做什麼,因爲你想在局部使用生成器不工作。你不能那樣做。您需要使用fields_for或自己輸入輸入HTML,但要小心爲輸入提供正確的名稱。另外,我非常確定,如果您查看服務器日誌,您會在該行嘗試使用構建器時看到錯誤。 Rails絕對沒有辦法在稍後通過AJAX請求呈現的部分中使用原始表單的構建器。

還有一個Railscasts,Ryan做了類似於你正在做的事情,但他沒有使用RJS。我相信這是這一集或有關它:http://railscasts.com/episodes/75-complex-forms-part-3

+0

非常感謝您的幫助。我會看看你給我的建議。 – Kim