Создать новое и выбрать существующее значение из отношения has_many - PullRequest
0 голосов
/ 11 сентября 2018

Networks содержит отношение has_one для vlans. Vlans содержит отношение принадлежат к сетям.

Когда я создаю новую сеть, я хочу, чтобы у меня была возможность выбрать существующий vlan с помощью vlanid -или- или создать новый vlan для новой сети.

Я смог создать совершенно новый vlan при создании сети, но я хотел бы иметь возможность выбрать существующий vlan -или- создать новый.

приложение / модели / network.rb

class Network < ApplicationRecord
  has_one :vlan
  accepts_nested_attributes_for :vlan, allow_destroy: true
end

приложение / модели / vlan.rb

class Vlan < ApplicationRecord
  belongs_to :network
end

дб / мигрирует / 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

дб / мигрирует / 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

приложение / администратор / 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

приложение / администратор / 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, и я в тупике. Я видел несколько похожих вопросов, размещенных вокруг, но ни один из ответов, которые я видел, не относился к этой конкретной ситуации. Любая помощь приветствуется.

...