网络包含VLAN的has_one关系。 局域网包含网络的belongs_to关系。
当我创建新网络时,我希望可以选择通过vlanid选择现有VLAN,或者为新网络创建新VLAN。
在创建网络时,我已经尽力能够创建一个全新的VLAN,但是我希望能够选择一个现有的VLAN或创建一个新的VLAN。
app / models / network.rb
class Network < ApplicationRecord
has_one :vlan
accepts_nested_attributes_for :vlan, allow_destroy: true
end
app / models / vlan.rb
class Vlan < ApplicationRecord
belongs_to :network
end
db / migrate / create_network.rb
class CreateNetworks < ActiveRecord::Migration[5.2]
def change
create_table :networks do |t|
t.string :comment
t.string :name
t.timestamps
end
end
end
db / migrate / create_vlan.rb
class CreateVlans < ActiveRecord::Migration[5.2]
def change
create_table :vlans do |t|
t.string :comment
t.integer :vlanid
t.belongs_to :network
t.timestamps
end
end
end
app / admin / networks.rb
ActiveAdmin.register Network do
permit_params :comment, :name, vlan_attributes: [ :id, :vlanid, :comment, :_destroy, :_edit ]
index do
selectable_column
column "Network Name" do |i|
i.name
end
column :comment
column "VLAN ID" do |i|
i.vlan.vlanid
end
column "VLAN Comment" do |i|
i.vlan.comment
end
actions
end
show do
attributes_table do
row :name
row :comment
end
panel 'vlan' do
table_for network.vlan do
column :vlanid
column :comment
end
end
end
form do |f|
f.inputs 'Details' do
f.input :name
f.input :comment
end
f.inputs 'Vlans' do
f.has_many :vlan do |c|
c.input :vlanid
c.input :comment
end
end
f.actions
end
end
app / admin / vlans.rb
ActiveAdmin.register Vlan do
belongs_to :network
permit_params :comment, :vlanid
end
我尝试在app / admin / networks.rb
中使用以下内容panel 'vlan' do
table_for network.vlan do
column :vlanid, :as => :select
column :comment
end
end
在这种情况下,我确实得到了一个下拉列表,但是唯一的值是“是”和“否”。
这是我第一次研究activeadmin,但我很困惑。 我已经看到过类似的问题,但是我所看到的答案似乎都不适用于这种特定情况。 任何帮助表示赞赏。