2014-01-13 5 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 с двумя действиями, new и create с удаленной формой на 'new'. Затем вы можете указать свой модальный на new действие, которое позаботится о модальном теле. (Обратите внимание, что ваш модальный должен быть вне формы, иначе кнопка отправки отправит обе формы сразу)

Когда вы отправляете удаленную форму, действие будет инициировано. Вы можете написать его, чтобы он возвращал объект json, содержащий имя и идентификатор поставщика. Затем вы можете захватить javascript-событие «ajax: success» на вашей удаленной форме внутри загрузочного файла и добавить опцию выбора вашего поставщика в результате успешной подачи заявки поставщика.

Надеюсь, что это имеет смысл, здесь есть много чего сделать, но это делает очень приятный UX.

+0

'Vendor has_many: expenses'. Я попытался добавить '@ cost.build_vendor' к контроллеру Expense. Я попробовал как разделы «Новый», так и «Создать». На какой из них он должен быть? – 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 
Смежные вопросы