Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется - Ruby on Rails - PullRequest
0 голосов
/ 24 октября 2018

Моя «дочерняя» форма содержит следующую команду выбора:

<%= child.select :parent_id, options_for_select(Parent.all.map{ |parent| parent.grandparent.name + " - " + parent.name }, {:include_blank => true}) %>

При действии «обновление» я получаю следующую ошибку:

Cannot add or update a child row: a foreign key constraint fails (`database_name`.`childs`, CONSTRAINT `fk_part2_5` FOREIGN KEY (`parent_id`) REFERENCES `parents` (`id`))

Модели выглядят так:

class Child < ApplicationRecord
  belongs_to :parent
end

class Parent < ApplicationRecord
  has_many :childs, :dependent => :delete_all 
end

class GrandParent < ApplicationRecord
  has_many :parents, :dependent => :delete_all
end

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Разобрался.Это была моя форма выбора, которая была неправильной.Фактическое значение отдельных опций выбора не было идентификаторами, поэтому не удалось обновить таблицу.Разобрался так:

<%= child.collection_select(:parent_id, Parent.all, :id, :parent_with_grandparent_name) %>

class Parent < ActiveRecord::Base

  has_many :childs, :dependent => :delete_all 
  belongs_to :grandparent
  def parent_with_grandparent_name
    grandparent.name + " - " + name
  end
end
0 голосов
/ 24 октября 2018

В options_for_select вызовите, вы используете массив текстов опций, что неверно.Вам нужно использовать массив пар [текст опции, значение опции]:

<%= child.select :parent_id, options_for_select(Parent.all.map { |parent| ["#{parent.grandparent.name} - #{parent.name}", parent.id] }), { include_blank: true } %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...