听起来像是你最好用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
这将允许您设置的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
和有它通过其Inventory
qty
可用。
我认为这个问题太广泛了,但是基本上你想要一个新的模型,它属于'位置'和'has_many''设备' –
它是如何太广泛?我提供了我所拥有的和我需要的地方的示例应用程序。不过谢谢你,这应该有所帮助:)我意识到这并不是非常困难,但我很难看出结构的可视化。 – DnfD