2014-01-13 141 views
0

我有費用和供應商模型。Rails嵌套字段未顯示字段

在費用表單中,我試圖添加一個New Vendor按鈕。

費用模型具有這樣的:

belongs_to :vendor 
accepts_nested_attributes_for :vendor 

爲代價的形式有這樣的:

<%= simple_form_for @expense, :html => {:class => 'form-horizontal'} do |f| %> 

... 

    <a data-toggle="modal" href="#vendorform"> 
     <p class="pull-right btn btn-primary btn-mini">New Vendor</p> 
     <div id="vendorform" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="vendorformLabel" aria-hidden="true"> 
     <%= f.fields_for :vendor do |ff| %> 
     <div class="modal-header"> 
      <a class="close" data-dismiss="modal">&#215;</a> 
      <h4 id="vendorformLabel">Add Vendor</h4> 
     </div> 
     <div class="modal-body"> 
      <%= ff.input :vendor_name %> 
      <%= ff.input :address1 %> 
      <%= ff.input :address2 %> 
      <%= ff.input :city %> 
      <%= ff.input :state %> 
      <%= ff.input :zipcode %> 
     </div> 
     <div class="modal-footer"> 
      <%= ff.submit 'Save Vendor', :class => 'btn btn-mini btn-primary' %> 
      <a class="btn btn-mini" data-dismiss="modal" href="#">Close</a> 
     </div> 
     <% end %> 
     </div> 
    </a> 

... 

當你點擊New Vendor按鈕,模式打開,但它是空白。

感謝您的幫助!

UPDATE1

我添加@expense.build_vendor到費用控制部New部。

現在模態窗體中的字段出現。

但是,當我提交時,它不會創建一個新的供應商。相反,它看起來像模式上的提交按鈕提交費用表單而不是模式供應商表單。如果沒有關聯的對象

回答

0

嵌套字段都不會令 - 你需要建立在你的控制器:

@expense.build_vendor 

而且是相當不尋常,爲belongs_to的關聯創建嵌套的領域 - 你有沒有考慮移動從Expense模型鑰匙到Vendor(假設它是1-1協會)?

UPDATE:

什麼你可能想要做的就是尋找到引導模式遠程選項(doc here)。我會創建vendors_controller兩個動作,newcreate與'新'遠程形式。然後你可以將你的模態指向new動作,這將會照顧模態的身體。 (請注意,您的模式必須在表單之外,否則提交按鈕將一次提交兩個表單)

當您提交遠程表單時,將觸發創建操作。您可以編寫它,以便返回包含供應商名稱和ID的json對象。然後,您可以在引導程序內的遠程表單上捕獲javascript事件'ajax:success',並向成功提交供應商表單的供應商選擇一個選項。

希望它是有道理的,這裏有很多事情要做,但它使得一個非常好的用戶體驗。

+0

一個'供應商的has_many:expenses'。我嘗試將'@ expense.build_vendor'添加到費用控制器。我嘗試了'New'和'Create'部分。它應該在哪一個? – Reddirt

+0

對我來說,這看起來很狡猾,如果供應商有很多費用,爲什麼你要通過開支創造一個新的供應商,而不是其他方式? – BroiSatse

+0

這是爲員工輸入新的費用。但是,對於不在數據庫中的供應商,他們可能會有費用。 – Reddirt

0

BroiSatse回答了我的問題 - 謝謝!

但是,經過思考,我決定只使用jquery(coffeescript)。我剛剛編寫了一個快速添加的供應商名稱,然後選擇它。

下面的代碼:

$('.add_vendor').click -> 
    vendorname = $("#vendor").val() 
    $.ajax 
    type: "POST" 
    url: "/vendors/" 
    data: 
     vendor: 
     vendor_name: vendorname 
    dataType: "json" 

    success: (data) -> 
     newOption = $('<option value="'+data.id+'" selected="selected">'+vendorname+'</option>') 
     $('#expense_vendor_id').append(newOption) 
     $('#vendor').val("") 
     return false 

    error:(data) -> 
     return false