Как передать выбранное значение из выпадающего списка и получить к нему доступ в качестве параметра для каскадных выпадающих меню в рельсах - PullRequest
0 голосов
/ 11 июня 2018

Отредактировано: Я пытаюсь добиться каскадного выпадающего списка.

В моем 1-м раскрывающемся списке я получаю все отдельные имена.

<%= f.input :names, collection: names.distinctnames, :label => "Select Name" %>

При выборе имениКак получить доступ к значению и передать его контроллеру / модели, чтобы я мог фильтровать по значениям и связывать его со следующим раскрывающимся списком.

В моей модели у меня есть следующая область действия

scope :distinctnames, ->{ Names.distinct.pluck(:names)}

Здесь я хочу добавить еще одну область, в которой указаны города для выбранного имени.

Итак, как мне получить данные, выбранные в моем представлении, и получить все значения в следующем раскрывающемся списке.

Если это неправильный подход, может кто-нибудь предложить мне альтернативный вариант и пример.

Мой код

<!DOCTYPE html>
<html>
<head>
  <script>
        $(document).on('change', '#names_id', function(){
          var custId = $(this).val();
          return custId;

        });
</head>
<body>
<div class="container">
  <div class="row">
    <div class="col-lg-6 col-lg-offset-3">
      <div class="panel panel-primary">
        <div class="panle-heading">Panel Primary</div>
        <div class="panel-body">
          <%= simple_form_for @ruby, url:{action: 'create'}, html: {class: 'form'}  do |f| %>
            <%= f.select :names_id, options_for_select(Names.distinctnames), {}, {:multiple => true} %>
            <%= f.select :city_name, options_for_select(Names.where(names_id: custId).pluck(:city_name)), {}, {:multiple => true} %>
          <% end %>
        </div>
      </div>
    </div>
  </div>
<div>
</body>
</html>

Здесь, во время загрузки представленияЯ получаю неопределенную локальную переменную или метод `custId 'для # <# <p>Как загрузить все остальные выпадающие списки пустыми, а затем связать значение из выбранного выпадающего значения со вторым.

1 Ответ

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

Итак, как я понимаю, у вас есть более одного выпадающего списка, но полученная зависимость, например, selected значение из drop-down list 1 повлияет на значения в drop-down list 2. В этом случае для достижения действия контроллера потребуется форма длябыть представленным, если то, о чем я думаю, правильно, у меня есть несколько идей:

Первая

Вы будете использовать библиотеку javascript или JQueryчтобы добавить это динамическое поведение на вашу страницу, сценарий будет выглядеть следующим образом:

1 - пользователь выберет значение

2 - actionListner запускается с помощью js, когда select.

3 - отправить запрос на сервер

4 - получить данные в соответствии с параметрами, которые вы отправили на сервер

5 - включить следующий раскрывающийся списокпосле привязки вернули данные с сервера.

Это решение не потребует от вас обновления страницы, что, я думаю, удовлетворит пользователя.

Второе решение

Вы положите actionListner на drop-down и отправите форму, когда пользователь выберет значение.

Tему потребуется небольшая проверка на стороне сервера, а также немного усилий для сохранения данных, которые были заполнены, если есть другие входные данные (сохранение их в переменных экземпляра, я имею в виду @select_drop_1 и использование их во входных данных, так как пользователь почувствует, чтозначения не пропущены).

Третье решение

Если применимо, что вы сделаете эти данные доступными после того, как пользователь открыл форму, Под этим я подразумеваю grouping этоdata, Создание запроса, который группирует города по этим отдельным именам, чтобы при выборе пользователем имени был запущен простой код js, включающий и привязывающий данные к следующему drop-down и т. д.

ЕслиЯ был бы вами, я бы выбрал вариант first или third, извините меня, потому что я не знаю схему вашего приложения, я не знаю, применимо ли это для создания grouping Я представляю себе, что именаполучил свой стол, и есть еще один под названием City.

Надеюсь, это поможет.

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