Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何传递下拉列表中的选定值,并将其作为rails中级联下拉列表的参数进行访问_Ruby On Rails_Ruby_Rubygems - Fatal编程技术网

Ruby on rails 如何传递下拉列表中的选定值,并将其作为rails中级联下拉列表的参数进行访问

Ruby on rails 如何传递下拉列表中的选定值,并将其作为rails中级联下拉列表的参数进行访问,ruby-on-rails,ruby,rubygems,Ruby On Rails,Ruby,Rubygems,编辑: 我正在尝试实现级联下拉 在我的第一个下拉列表中,我得到了所有不同的名称 <%= f.input :names, collection: names.distinctnames, :label => "Select Name" %> 在这里,我想添加另一个作用域,为所选名称提供城市 那么,如何在视图中选择数据并在下一个下拉列表中获取所有值呢 如果这是一个错误的方法,有人能给我推荐另一种方法吗 我的代码 <!DOCTYPE html> <html>

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

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

<%= f.input :names, collection: names.distinctnames, :label => "Select Name" %>
在这里,我想添加另一个作用域,为所选名称提供城市

那么,如何在视图中选择数据并在下一个下拉列表中获取所有值呢

如果这是一个错误的方法,有人能给我推荐另一种方法吗

我的代码

<!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”<
如何将所有其他下拉列表加载为空,然后将所选下拉列表中的值绑定到第二个下拉列表。

据我所知,您有多个下拉列表,但与下拉列表1中的所选值一样,获取的依赖关系将影响下拉列表2中的值,在这种情况下,到达控制器操作需要提交表单,如果我的想法是正确的,我有不止一个想法:

第一个

您将使用javascript或JQuery库将此动态行为添加到页面中,场景如下:

1-用户将选择值

2-选择时使用js触发actionListner

3-向服务器发送请求

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

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

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

第二种解决方案

您将把actionListner放在下拉列表中,并在用户选择value时提交表单

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

第三种解决方案

如果在用户打开表单后可以使用这些数据,我的意思是对这些数据进行分组,进行查询,根据这些不同的名称对城市进行分组,这样当用户选择名称时,一个简单的js代码将运行启用并将数据绑定到下一个下拉列表,依此类推

如果我是你,我会选择第一个或第三个选项,请原谅,因为我不知道你的应用程序的模式,我不知道它是否适用于分组,我想象名称得到了它的表,还有一个叫做City的表


希望能有帮助

表单不需要提交,一个简单的ajax调用就足够了。我想这就是你在第一篇文章中的意思,但你的开场白有点夸张misleading@engineersmnky我完全同意你的观点,所以我并不真的喜欢这个解决方案,而是使用ajax@engineersmnky,您还可以提供一个使用ajax的示例吗
<!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>