首页 > 解决方案 > 如何从下拉列表中传递选定的值并将其作为参数访问以在 Rails 中级联下拉列表

问题描述

编辑: 我正在尝试实现级联下拉。

在我的第一个下拉列表中,我得到了所有不同的名称。

<%= 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' for #<#

如何将所有其他下拉列表加载为空,然后将所选下拉值中的值绑定到第二个。

标签: ruby-on-railsrubyrubygems

解决方案


据我了解,您有多个下拉列表,但得到的依赖项,Like selectedvalue fromdrop-down list 1将影响中的值drop-down list 2,在这种情况下,到达控制器操作将需要提交表单,如果我的想法是正确的我有不止一个想法:

第一

您将使用javascriptJQuery库将此动态行为添加到您的页面,场景将是这样的:

1-用户将选择值

2- anactionListner使用jswhen触发select

3-向服务器发送请求

4-根据您发送到服务器的参数获取数据

5-绑定服务器返回的数据后启用下一个下拉列表。

此解决方案不需要您刷新页面,我认为这会让用户满意。

第二种解决方案

当用户选择值时,您将放置actionListnerdrop-down提交表单。

这将需要在您的服务器端进行一些验证,再加上一些努力来保存如果有其他输入时填充的数据(将它们保存在实例变量中,我的意思是喜欢@select_drop_1并在输入中使用它们,因为用户会觉得值不是错过)。

第三个解决方案

如果可以在用户打开表单后使这些数据可用,我的意思是grouping这个数据,进行查询,按这些不同的名称对城市进行分组,这样当用户选择一个名称时,一个简单的js代码将运行启用和绑定数据到下drop-down等等。

如果我是你,我会选择first其中一个称为。thirdgroupingCity

希望能帮助到你。


推荐阅读