has_and_belongs_to_many с таблицей соединений и коллекцией флажков - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь создать страницу администратора, которая имеет вложенную форму для другой модели.

У меня есть модель Playbook:

playbook.rb

  has_and_belongs_to_many :groups
  accepts_nested_attributes_for :groups

мой вид формы

_form.html.haml

<%= form_with(model: playbook, local: true) do |form| %>

   ...

  <%= collection_check_boxes(:group, :group_ids, Group.all, :id, :name) %>

  <div class="actions">
    <%= form.submit %>
  </div>

Чтобы объяснить это более подробно, в сборниках пьес может быть много групп, которые являются другой моделью иЯ хочу автоматически сохранить таблицу присоединения к groups_playbooks при сохранении playbook с использованием, как мне кажется, вложенной формы.Я просто не знаю, как сделать вложенную форму с набором флажков, таких как мой вид.

Вот часть схемы, которая поможет получить лучшую картину:

  create_table "groups", force: :cascade do |t|
    t.string "name"
    t.string "variables"
    t.bigint "server_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["server_id"], name: "index_groups_on_server_id"
  end

  create_table "groups_playbooks", id: false, force: :cascade do |t|
    t.bigint "group_id", null: false
    t.bigint "playbook_id", null: false
  end

  create_table "groups_servers", id: false, force: :cascade do |t|
    t.bigint "group_id", null: false
    t.bigint "server_id", null: false
  end

  create_table "playbooks", force: :cascade do |t|
    t.string "name"
    t.string "play"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "description"
  end

  create_table "playbooks_servers", id: false, force: :cascade do |t|
    t.bigint "playbook_id", null: false
    t.bigint "server_id", null: false
  end

  create_table "servers", force: :cascade do |t|
    t.string "name"
    t.string "ip"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.bigint "group_id"
    t.index ["group_id"], name: "index_servers_on_group_id"
  end

1 Ответ

0 голосов
/ 05 июня 2018

Согласно спецификации вы должны использовать playbook вместо groups

<%= collection_check_boxes(:playbook, :group_ids, Group.all, :id, :name) %>

Но поскольку у вас есть конструктор форм, вам следует посмотреть эту спецификацию

Для вашего случая

<%= form.collection_check_boxes(:group_ids, Group.all, :id, :name) %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...