Невозможно создать связанную / вложенную дочернюю запись с "accepts_nested_attributes_for" - PullRequest
0 голосов
/ 30 марта 2019

Я получаю следующую ошибку при попытке создать связанную дочернюю запись через родителя с помощью «accepts_nested_attributes_for»:

ActiveRecord :: RecordInvalid (валидация завершилась неудачно: опрос с подробностями опроса не может быть пустым, должна существовать деталь с подробностями опроса об опросе):

Хотите знать, если я пропустил какой-либо кусок для создания дочерней записи автоматически?

Пример ввода: (первые 4 клавиши в приведенном ниже вводе объединяются в хэш параметров перед сохранением)

{: organization_id => "жестко закодировано",: activity_library_type => 0,: creation_by => "жестко закодировано",: updated_by => "жестко закодировано", "Activity_name" => "SS-28", "описание" => "", "content_path_url" => "", "activity_status" => 0, "activity_type" => 4, "group" => "group", "code_level" => "code", "topic" => "topic "," solution "=>" solution "," survey_question_details_attributes "=> [{" question "=>« Question1 »,« order »=> 1,« question_type »=> 0}]}

Параметры:

params.require (: activity_detail) .permit (: имя_ действия,: описание, : content_path_url,: activity_status,: activity_type,: group,: code_level,: topic,: solution,: duration_seconds,: survey_question_details_attributes => [: id,: question,: order,: question_type,: _ destroy])

Ниже представлен контроллер и модели (в каждом задании содержится много вопросов):

class ActivityController < ApplicationController
def create
    # Merged additional_attributes hash to content_params recieved from front end (first 4 keys mentioned above in sample input)
    full_activity_details_record = additional_attributes.merge(content_params)
    response = ActivityDetail.create(full_activity_details_record)
  end
end

class ActivityDetail < ApplicationRecord
  has_many :survey_question_details, dependent: :destroy, foreign_key: :survey_id
  accepts_nested_attributes_for :survey_question_details

  validates :activity_name, :organization_id,
            :activity_library_type, :activity_status, :activity_type,
            :created_by, :updated_by, presence: true
  validates :activity_name, uniqueness: { case_sensitive: false }, length: { maximum: 55 }
  validates :description, length: { maximum: 160 }

end


class SurveyQuestionDetail < ApplicationRecord
  belongs_to :activity_detail, foreign_key: :survey_id

  validates :question, :survey_id, :question_type, :order, presence: true
  default_scope { order(:order) }
end

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019

Я думаю, что созданные параметры являются неполными.Параметры должны быть указаны под ключом деятельности_детали

:activity_detail => {
  {
    :organization_id=>"hardcoded", 
    :activity_library_type=>0, 
    :created_by=>"hardcoded", 
    :updated_by=>"hardcoded", 
    "activity_name"=>"s-s-28", 
    "description"=>"", 
    "content_path_url"=>"", 
    "activity_status"=>0, 
    "activity_type"=>4, 
    "group"=>"group", 
    "code_level"=>"code", 
    "topic"=>"topic", 
    "solution"=>"solution", 
    "survey_question_details_attributes"=>[
      {
        "question"=>"Question1", 
        "order"=>1, 
        "question_type"=>0
      }
    ]
  }
}
0 голосов
/ 30 марта 2019

Поскольку вы не поделились своими взглядами, позвольте мне начать разговор.

Прежде всего, вы подтвердили наличие истинного присутствия для атрибутов модели, следовательно, вы получаете ошибку проверки именно.

####in SurveyQuestionDetail model
###this is causing the error => Survey question details SURVEY can't be blank
##you must either pass the survey_id as hidden field or comment it out
validates :question, :survey_id, :question_type, :order, presence: true

MOREOVER, по вашему мнению, вы должны использовать fields_for для вложенных атрибутов в ваших формах

что-то вроде

<%= form_with(@activity_detail: show, local: true) do |form| %>
  # Show name and label
  <%= form.fields_for :survey_question_detail do |s| %>
    <%= s.label :number %>
    <%= s.number_field :number %>
    ##can also include hidden fields to add other model...survey_id
  <% end %>
  # Submit Button
<% end %>

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...