Изменение выпадающего меню на основе другого выпадающего списка в Ruby on Rails - PullRequest
0 голосов
/ 29 июня 2018

В настоящее время у меня есть форма, которая выглядит следующим образом:

<tr>
  <td>
   <%= f.hidden_field :_destroy %>
   <%= link_to "remove", '#', class: "remove_record"
</td>
    <td><%= f.date_field :date, as: :date, value: f.object.try(:strftime,"%m/%d/%Y"), class: 'form-control' %> </td>
    <td><%= f.text_field :description, label: false, class: 'form-control input'  %></td>
    <td><%= f.text_field :reference, label: false, class: 'form-control input'  %></td>
    <td>  <%= f.collection_select :bank_account_id, BankAccount.all, :id, :name, {:prompt => false},class:"btn btn-sm" %></td>
    <td><%= f.collection_select :gl_account_id, GlAccount.all, :id, :name, {:prompt => false},class:"btn btn-sm" %></td>
    <td><%= f.collection_select :vat_type, Transaction.vat_types.map{ |dp| [dp.first, dp.first.humanize] }, :first, :second,{:prompt => false},class:"btn btn-sm"  %></td>
    <td> <%= f.text_field :total_amount, class: 'form-control input'  %></td>
    <%  f.check_box :payment, :value => true %>

</table>

Я хочу добавить еще один <td> после моего столбца удаления, который предлагает пользователю выбрать тип оплаты:

<select> 
  <option value="regular">Regular</option>
  <option value="invoice">Invoice</option>
  </select>

Это изменит строку:

<td><%= f.collection_select :gl_account_id, GlAccount.all, :id, :name, {:prompt => false},class:"btn btn-sm" %></td>

И станет:

<td><%= f.collection_select :purchase_id, Purchase.all, :id, :invoice_number, {:prompt => false},class:"btn btn-sm" %></td>

Таким образом, пользователь может легко изменить тип транзакции, которую он выполняет, без необходимости перенаправления на новую форму. Есть идеи, как мне этого добиться?

1 Ответ

0 голосов
/ 29 июня 2018

1 => Добавить опцию выбора для типа транзакции после удаления ссылки

<%=select_tag "transaction_type", options_for_select([['regular', 'Regular'], ['invoice', 'Invoice']]), class: 'transaction_type'%>

2 => Добавить уникальный идентификатор в поле select_, который будет динамически вызываться при изменении типа транзакции

<td><%= f.collection_select :gl_account_id, GlAccount.all, :id, :name, {:prompt => false},class:"btn btn-sm", id: 'gl_account' %></td> 
<td><%= f.collection_select :vat_type, Transaction.vat_types.map{ |dp| [dp.first, dp.first.humanize] }, :first, :second,{:prompt => false},class:"btn btn-sm", id: "vat_type"  %></td>

3 => Использование Jquery

<script>
  //by default hide both gl_account and vat_type select box
  $('#vat_type, #gl_account').hide();
  // on change transaction_type show/hide these select box
  $('.transaction_type').on('change', function(){
    var transaction_type_Val = $(this).val();
    if (transaction_type_Val == 'regular'){
      $('#gl_account').show();
      $('#vat_type').hide();
    }else{
      $('#gl_account').hide();
      $('#vat_type').show();
    }
  })
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...