Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.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 将用于选择的选项转换为使用两个集合的简单表单_Ruby On Rails_Ruby_Simple Form_Collection Select - Fatal编程技术网

Ruby on rails 将用于选择的选项转换为使用两个集合的简单表单

Ruby on rails 将用于选择的选项转换为使用两个集合的简单表单,ruby-on-rails,ruby,simple-form,collection-select,Ruby On Rails,Ruby,Simple Form,Collection Select,这是我的第一个问题,因此,如果有任何让我的程序员同事更容易理解的建议,我将不胜感激 背景 在用于下照片广告订单的表单上,您可以选择一个品牌和一个型号,但每个型号的完整列表都会列出用户体验。下面是列出每个模型的表单代码 <div id="photo-ad-make-model-fields" class='make-model-year-selector'> <%= f.input :listing_known_make, label: 'Make',

这是我的第一个问题,因此,如果有任何让我的程序员同事更容易理解的建议,我将不胜感激

背景 在用于下照片广告订单的表单上,您可以选择一个品牌和一个型号,但每个型号的完整列表都会列出用户体验。下面是列出每个模型的表单代码

 <div id="photo-ad-make-model-fields" class='make-model-year-selector'>
      <%= f.input :listing_known_make, label: 'Make',
                  collection: vehicle_selection.make_choices,
                  input_html: {
                      id: 'photo-ad-order-form-listing-known-make',
                      class: 'vehicle-make form-control select2 jcf-ignore',
                      data: {
                          target: 'photo-ad-order-form-listing-known-model',
                          placeholder: 'Select a make'
                      }
                  } %>
      <%= f.input :listing_known_model, label: 'Model',
                  collection: vehicle_selection.all_model_choices,
                  input_html: {
                      id: 'photo-ad-order-form-listing-known-model',
                      class: 'vehicle-model form-control select2 jcf-ignore',
                      data: {
                          placeholder: 'Select a model'
                      }
                  } %>
有一个部分用于用户搜索制作或模型列表,它的工作方式正是我希望它的工作方式。 用户选择make,单击模型的输入,然后仅列出make特定的模型。代码如下

这是由java脚本驱动的,java脚本是rails模型特有的,位于每个models视图文件夹下的view目录中。第一次在application.js之外处理js时,这是另一家公司编写的遗留代码。通过研究,我确定这是一个rails特性,在javascript中使用rails语法时,它将在application.js文件中失败,但特别是在视图中models文件夹的路径上,它将启动。请纠正我或让我知道更多关于这个rails功能,我不知道

内部代码view/make/index.js

$ .html .数据“占位符”,“选择品牌”;

内部代码view/model/index.js

$ .html .数据“占位符”,“选择模型”;

所以,说到我的问题,照片广告表单是一个简单的建筑商表单的一部分。因此,我知道我需要将部分代码转换为简单表单,并将局部表单变量包含在表单对象中,然后保存到数据库中

我的simple\u form部分的转换版本,在它自己的部分中称为_make\u select.erb

  <fieldset class="make-model-selector">
      <div class="form-group clearfix">
          <%= f.input :listing_known_make, label: 'Make', 
                        collection: vehicle_selection.make_choices,
                        input_html: {
                        class: 'vehicle-make form-control select2 jcf-ignore', 
                        id: 'photo-ad-order-form-listing-known-make',
                        data: {
                           target: 'photo-ad-order-form-listing-known-model',
                           placeholder: 'Any Make'
                       }
                    } %>  
      </div>

      <div class ="form-group clearfix">
          <%= f.input :listing_known_model, label: 'Model', 
                      collection: vehicle_selection.model_choices, 
                      input_html: {
                      class: 'vehicle-model form-control select2 jcf-ignore', 
                      id: 'photo-ad-order-form-listing-known-model',
                       data: {
                            placeholder: 'Any Model'
                             }
                          }
                       %>   
      </div>
</fieldset>
我以partial\u form.html.erb的形式调用此partial

<%= render partial: 'photo_ad_orders/make_select.html.erb', locals: {f: f} %>
这就是我所期望的,你选择make,模型按预期过滤,我点击保存数据库,设置了正确的目标、符号和ID。它成功地将您的选择保存到数据库中

[表格选择成功][2]

所以现在问题来了

我以为我成功地完成了他们希望我完成的功能,但在对该功能进行QA测试后,我确定当用户单击编辑按钮时,rails会呈现编辑页面。所有内容都保持由活动记录(包括所选品牌)提供动力的状态。但是模型字段是空的,当你点击该字段时,没有任何基于make的可用模型。用户必须单击make字段,选择不同的makeAudi来启动查询,返回到正确的makeAston Martin,然后列出模型Ddb7等,用户可以选择正确的模型

所以

单击“编辑”时应填写所选模型 至少应该已经使用可用模型查询用户,因为重新渲染时会保留make 我相信这一点,因为当我转换为简单表单时,我不知道如何在options\u for\u selectcollection,collection中包含nil大小写

所以我需要的是将其转换为简单形式的正确方法

你能告诉我用两个简单的集合将这个选项转换为select的正确方法吗


我有更多的图片,但是stackoverflow因为声誉问题只允许我使用2。

我想你必须通过一个程序才能进行选择,下面可能会有所帮助:

  f.input :listing_known_make, 
          collection: vehicle_selection.make_choices, 
          input_html: { multiple: true }, 
          selected: -> (make) { vehicle_selection.make.any? {|x| x == make} }

我决定我需要改变方法,给模型输入所有可用的模型,并让javascript处理过滤

这对我现在有用

 <div class ="form-group clearfix">
          <%= f.input :listing_known_model, label: 'Model', 
                      collection: vehicle_selection.all_model_choices, 
                      input_html: {
                      class: 'vehicle-model form-control select2 jcf-ignore', 
                      id: 'photo-ad-order-form-listing-known-model',
                       data: {
                            placeholder: 'Any Model'
                             }
                          }
                       %>   
      </div>
车辆选择.rb

def型号选择 @模型| |选项|=make.present?model_source.callmake:[] 结束

定义所有_模型_选项 @所有|模型|选择|=->{MakeModel.models}
结束

首先,感谢Ucpuzz尝试帮助我。我意识到我粘贴了make代码,它工作得很好,这是我需要帮助的模型部分。所以我编辑了我的文章,也以你为例,尝试了我的观点。这里的结果非常酷的效果,但不是我需要的。要选择1个模型,编辑时,应已填写模型选择。
 <div class ="form-group clearfix">
          <%= f.input :listing_known_model, label: 'Model', 
                      collection: vehicle_selection.all_model_choices, 
                      input_html: {
                      class: 'vehicle-model form-control select2 jcf-ignore', 
                      id: 'photo-ad-order-form-listing-known-model',
                       data: {
                            placeholder: 'Any Model'
                             }
                          }
                       %>   
      </div>