如何解决批量添加物品栏杆6
我有一个小项目管理应用程序。
在应用程序中,我有一个项目,项目和交付模型。
class Project < ApplicationRecord
has_many :locations,dependent: :destroy
has_many :items,dependent: :destroy
has_many :deliveries,dependent: :destroy
end
class Item < ApplicationRecord
belongs_to :project
belongs_to :location,optional: true
has_many :delivery_items,dependent: :destroy
has_many :deliveries,through: :delivery_items
enum status: [:unscheduled,:scheduled,:delivered]
end
class Delivery < ApplicationRecord
belongs_to :project
has_many :delivery_items,dependent: :destroy
has_many :items,through: :delivery_items
enum status: [ :unapproved,:approved,:scheduled ]
end
我也有一个delivery_item连接表
class DeliveryItem < ApplicationRecord
belongs_to :delivery
belongs_to :item
end
我添加了一个名为location的新模型,该模型将项目分类为项目中的组。
class Location < ApplicationRecord
belongs_to :project
has_many :items
has_many :part_numbers,through: :items
def bulkadd(delivery)
self.items.each do |row|
batch << Product.new(row)
end
end
end
此刻,用户通过页面上的表单分别将商品添加到交货中
<h6>Add to Delivery</h6>
<%= form_for @delivery_item,html: {class: 'form-inline'} do |form| %>
<div class="form-group">
<%= form.collection_select :delivery_id,@project.deliveries.all,:id,:date,placeholder: 'Add to Delivery',class: 'form-control' %>
</div>
<%= form.hidden_field :item_id,value: item.id %>
<div class="form-group">
<%= form.submit "Add",class: 'btn btn-primary' %>
</div>
<% end %>
我想通过在每个位置添加一个批量添加按钮来简化此过程,该按钮会将所有相关项目添加到选定的具有许多项目的交货中。
我知道我将需要delivery_item(交付物品)。
我似乎无法在大脑中发挥最后作用
解决方法
创建has_many
或has_and_belongs_to_many
关联宏creates an others_ids
setter/getter时。在这种情况下,item_ids=
会自动从联接表中添加/删除行。
将其与form option helpers一起使用来创建一个选择,用户可以选择多个记录确实很容易:
<%= form_for(@delivery) do |form| %>
<div class="field">
<%= f.label :item_ids,'Select the items' %>
<%= f.collection_select :item_ids,@items,:id,:name,multiple: true %>
</div>
<% end %>
或者,如果您喜欢复选框:
<%= form_for(@delivery) do |form| %>
<div class="field">
<%= f.label :item_ids,'Select the items' %>
<%= f.collection_check_boxes :item_ids,:name %>
</div>
<% end %>
用您想用于选项文本的任何属性替换:name
。
class DeliveriesController < ApplicationController
before_action :set_delivery,only: [:show,:edit,:update,:destroy]
# This avoids a database query in the view
before_action :set_items,only: [:new,:edit]
# POST /deliveries
def create
@delivery = Delivery.new(delivery_params)
if @delivery.save
redirect_to @delivery,notice: 'Delivery created'
else
set_items
render :new
end
end
# PUT|PATCH /deliveries/1
def update
if @delivery.update(delivery_params)
redirect_to @delivery,notice: 'Delivery updated'
else
set_items
render :edit
end
end
private
def set_delivery
@delivery = Delivery.find(params[:id])
end
def set_items
@items = Item.all
end
def delivery_item_params
# Passing the hash `item_ids: []` allows an array of permitted scalar types.
params.require(:delivery)
.permit(:foo,:bar,:baz,item_ids: [])
end
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。