数组中名称列表中的多个对象

时间:2017-09-13 23:03:20

标签: ruby-on-rails arrays ruby mongodb mongoid

enter image description here我正在尝试为数组中的每个名称创建单独的记录。数组通过一个控制器中的表单发起,并且各个记录需要保存在一个连接(类型)表中(我知道mongo中没有" join"表,但它是最好的描述它的方式)。目前使用Mongoid / MongoDB运行Rails 5。

原始形式:

    <%= form_tag create_multiple_batch_keg_index_path, method: 
        :create do |form|%>
        <div class="field">
        <table class="table table-hover table-condensed">
        <thead>
        <tr>
          <th>Select All</th>
          <th>Keg Name</th>
        </tr>
        </thead>
        <tbody>
          <% Keg.each do |batch_keg| %>
              <tr>
                <td><%= check_box_tag 'batch_keg_ids[]', batch_keg.id 
                -%> </td>
                <td><%= batch_keg.name -%> </td>
              </tr>
          <% end %>
        </tbody>
        </table>
        </div>

Originating Controller Params:

    def batch_params
     params.require(:batch).permit(:batch_keg_attributes => [keg_id, 
     :active, :visible, :wholesale_inventory, :taproom_inventory, 
     :hold_inventory])
    end 

加入控制器

    def create_multiple
     batch_keg_ids(params).flatted.map{|ids| 
     BatchKeg.create(:wholesale_inventory => true, :taproom_inventory 
     => true, :hold_inventory => false, :active => true, :visible => 
     true)}redirect_to batches_url
    end

路线

    resources :batch_keg do
     collection do
      post :create_multiple
      put :update_multiple
      get :collection
     end
    end

我认为我已经成功完成了大部分流程(到目前为止,我已经完成了几条错误消息,但我已经陷入困境)。我试图找到一个解决方案,但我们已经找到了一个有效的网络。我是A),关闭但不完全在那里,或B)完全偏离正轨。

看起来我得到了我需要的数据,但我不知道如何在连接控制器中使用它(我想),我已经在这上面了好几个小时,我的大脑是玉米粥。我觉得我需要在join控制器中创建一个变量来保存数据,这就是我的目标。提前感谢您对此代码的任何建议,或者更有效的方法。

1 个答案:

答案 0 :(得分:1)

错误信息非常清楚。您将params作为参数传递给batch_kegs_ids,但该方法不需要参数。此外,看起来batch_kegs_ids方法是空的(没有代码)。我完全删除了(可能不应该在那里)。

我还将create_multiple方法更改为

 def create_multiple
   params[:batch_keg_ids].each do |id| 
     BatchKeg.create(keg_id: id, wholesale_inventory: true, taproom_inventory: true, hold_inventory: false, active: true, visible: true)
   end
   redirect_to batches_url
 end