Как исправить ошибку RecordNotFound при создании записи в Active Admin? - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть приложение для регистрации, которое регистрирует Participant, которое затем можно поместить в Group с другими участниками.Я использую ActiveAdmin, чтобы назначить их группам.

Когда я пытаюсь создать новую группу с использованием активного администратора, я получаю следующую ошибку:

«ActiveRecord :: RecordNotFound в Admin :: GroupsController # create» с этой дополнительной информацией:«Не удалось найти всех участников с« id »: (0, 0) (найдено 0 результатов, но искал 2)»

Я подумал, что, возможно, это потому, что я не сгенерировалконтроллера для моей модели пока нет.Однако при запуске генерации для контроллера я получил эту ошибку:

identical  app/controllers/groups_controller.rb
  route  get 'groups/index'
  route  get 'groups/show'
  route  get 'groups/update'
  route  get 'groups/edit'
  route  get 'groups/create'
  route  get 'groups/new'
  invoke  erb
  exist    app/views/groups
  identical    app/views/groups/new.html.erb
  identical    app/views/groups/create.html.erb
  identical    app/views/groups/edit.html.erb
  identical    app/views/groups/update.html.erb
  identical    app/views/groups/show.html.erb
  identical    app/views/groups/index.html.erb
  invoke  test_unit
  identical    test/controllers/groups_controller_test.rb
  invoke  helper
  The name 'GroupsHelper' is either already used in your application or reserved by Ruby on Rails. Please choose an alternative and run this generator again.

Моя папка приложения содержит все необходимые файлы, поэтому я добавил @group = Group.new к groups_controller.

Вот мои модели:

# participant.rb
class Participant < ApplicationRecord
  has_one :volunteer_detail, :dependent => :destroy, inverse_of: :participant
  accepts_nested_attributes_for :volunteer_detail,   :allow_destroy => :true

  has_one :student_detail, :dependent => :destroy, inverse_of: :participant
  accepts_nested_attributes_for :student_detail,   :allow_destroy => :true
  has_and_belongs_to_many :groups, join_table: :matchups

  validates :last_name, presence: true
  # validates :gender, inclusion: { in: %w(male female) }
  validates :phone, presence: true
end

# group.rb
class Group < ApplicationRecord
  has_and_belongs_to_many :participants, join_table: :matchups
end

Вот мой активный файл ресурса администратора для группы:

ActiveAdmin.register Group do
  permit_params :description , participant_ids: []
  form do |f|       
    f.inputs 'Group Details' do
    f.input :description
    f.input :participant_ids, as: :check_boxes, collection: Participant.pluck_all(:first_name, :last_name, :gender, :role, :id )
  end
end

Я ищу, чтобы создать новый Groupзапись с использованием формы в ActiveAdmin, которая использует записи из связанной модели Participant.

В настоящее время я получаю сообщение об ошибке RecordNotFound.Это может быть связано с проблемами с контроллером, но я не уверен, как исправить проблему, возникшую при генерации контроллера, или это проблема.

Любое понимание моей проблемы будет оценено.

1 Ответ

0 голосов
/ 01 февраля 2019

Проблема не связана с GroupsController.Ресурс ActiveAdmin не имеет к этому никакого отношения.Проблема во вводе для member_ids.Если вы проверите сгенерированный HTML, вы можете увидеть пустое значение в настройках.Должно быть:

f.input :participants, as: :check_boxes, collection: Participant.pluck(:first_name, :id )

В этом случае у вас есть first_name в качестве метки и id в качестве значения, и все идет хорошо.Если вам нужна сложная метка (: first_name,: last_name,: пол,: роль), вам нужно создать отдельный метод в модели группы:

def label_for_admin
  first_name + last_name + gender + role
end

f.input :participants, as: :check_boxes, collection: Participant.pluck(:label_for_admin, :id )
...