Динамическое поле выбора в Ruby on Rails - PullRequest
1 голос
/ 26 марта 2012

Я новичок в Ruby on Rails. Я начал работать над RoR 1 месяц назад. Моя проблема:

У меня есть одна таблица с именем syscode, в которой есть Id, Name, Desc и Parent_id. Для родителя Parent_id = 0, а для потомков у них есть parent_id в соответствии с идентификатором родителя.

У меня должно быть два поля выбора, в которых первое поле выбора должно отображать родителей, а второе поле выбора должно быть динамическим, т. Е. При щелчке родителя в первом окне выбора должны отображаться соответствующие дочерние элементы во втором поле выбора. Мне удалось получить parent_id при нажатии на опции в первом окне выбора.

Код, который я пробовал:

Просмотр: selectnew.html.erb

<div id="dvSelectSyscodeForm">  
  <%= form_for(@syscode) do |f| %>
    <div class="field">
      <label for="syscode_fksyscodeparent">Parent</label>
      <%= f.select :fksyscodeparent, Syscode.where("fksyscodeparent = '0'").map {|s| ["#{s.syscode}", s.id ]} %>
    </div>
    <div id="dvShowChild" style="display:none;">
      <div class="field">
        <label for="childSyscodes">Child</label>
        <%= f.select :fksyscodeparent, Syscode.where("fksyscodeparent = '0'").map {|s| ["#{s.syscode}", s.id ]} %>
      </div> 
    </div>
    <script type="text/javascript">
      var scode = [];
      function parentSelected() {        
        parent_id = $('#syscode_fksyscodeparent').val();
        alert(parent_id);          
      }    

      $(document).ready(function() {
        parentSelected();
        $('#syscode_fksyscodeparent').change(parentSelected);
      });

    </script>
    <% end %>  
    </div>
    <%= link_to 'Back', syscodes_path %>

Контроллер: выберите новый

def selectnew
  @syscode = Syscode.new
  respond_to do |format|
    format.html # selectnew.html.erb
    format.json { render json: @syscode }
  end
end

Пожалуйста, помогите мне, ребята ... Заранее спасибо ... !!

Ответы [ 2 ]

0 голосов
/ 21 октября 2013

Вы можете выполнить следующие шаги - Шаг -1 В вашем файле просмотра Родительское поле выбора

= f.select :parent_id, @parent_val,  data: { remote: true, url: update_children_url}
child select box

= f.select :child_id, @child_values.present? ? @child_values : [], {prompt: 'Select' }

Шаг -2 создайте файл update_children.js.erb в вашей папке представлений и запишите следующий код -

 $("#child_id").html("#{j options_for_select(@child_values)}")

Шаг - 3 В вашем контроллере

def update_children
  return values @child_values
end
0 голосов
/ 26 марта 2012

Вам необходимо выполнить Ajax-вызов в вашей функции parentSelected.Возврат от этого Ajax-вызова должен быть javascript, который заменяет содержимое «dvShowChild» новым html-содержимым для текущего выбранного родителя.

В качестве альтернативы вы можете сделать ajax-вызов, который выбирает html, а затем в успешном обратном вызове заменитьhtml-значение dvShowChild с html, возвращаемым из вызова ajax.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...