Rails 4 Inventory Application:数据库设计和嵌套表单的使用

时间:2016-02-05 14:02:46

标签: ruby-on-rails database-design

我构建了这个应用程序,它运行良好且非常简单:https://github.com/ornerymoose/DeviceCount。它允许您为设备创建新条目,您可以在其中指定设备的计数(即库存量)。

现在即使这样有效,我也被告知需要在每个地点进行一次'基础。即,您创建一个条目,您将有10个文本字段(如果确实有10个设备。此数量永远不会更改,设备也不会更改),对于设备,您将为每个设备文本字段输入该设备的计数。您将选择下拉菜单的位置。创建该条目后,您将拥有:

-1位置

-10列出的设备,都有自己的计数。

我正在努力围绕如何设计这些模型。我应该有EntryDevice型号吗?一个单独的Count模型?

嵌套表格会是最好的方法吗?

赞赏任何和所有输入。

1 个答案:

答案 0 :(得分:1)

对于Inventory加入模型(has_many :through),您感觉最合适:

#app/models/inventory.rb
class Inventory < ActiveRecord::Base
   # id | device_id | location_id | qty | created_at | updated_at
   belongs_to :device
   belongs_to :location
end

#app/models/device.rb
class Device < ActiveRecord::Base
   has_many :inventories
   has_many :locations, through: :inventories
   accepts_nested_attributes_for :inventories
end

#app/models/location.rb
class Location < ActiveRecord::Base
   has_many :inventories
   has_many :devices, through: :inventories
end

这将允许您设置&#34;数量&#34;每个位置的device(必须使用accepts_nested_attributes_for):

#app/controllers/devices_controller.rb
class DevicesController < ApplicationController 
   def new
     @device = Device.new
     @locations = Location.all
   end

   def create
     @device = Device.new device_params
     @device.save
   end

   private

   def device_params
     params.require(:device).permit(inventories_attributes: [:qty])
   end
end

#app/views/devices/new.html.erb
<%= form_for @device do |f| %>
  <%= f.text_field :name %>
  <%= f.fields_for :inventories, Location.all do |i| %>
     <%= i.number_field :qty %>
  <% end %>
  <%= f.submit %>
<% end %>

这样您就可以创建新的Device,并通过其qty提供Inventory