mysql - 无法添加或更新子行 : a foreign key constraint fails - Ruby on Rails

标签 mysql ruby-on-rails ruby

我的“子”表单包含以下选择:

<%= 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

最佳答案

想通了。是我选择的表格错了。各个选择选项的实际值不是 ID,因此无法更新表。想通了:

<%= 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

关于mysql - 无法添加或更新子行 : a foreign key constraint fails - Ruby on Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52976149/

相关文章:

ruby-on-rails - Sidekiq错误: could not connect to server: No such file or directory

ruby-on-rails - 奇怪的 ActiveRecord::AssociationTypeMismatch

ruby floats 根据顺序加起来不同的值

ruby - 在 Ubuntu 12.04 上编译 Postgres pg gem 时出错

mysql - 如何在插入表事务数据时创建触发器以减少表项的列数量

java - 将 PHPMyAdmin MySQL 连接配置转换为 JDBC

mysql - 查找 MySql 列中逗号分隔的字符串中是否存在大于数字的值

MySQL,拆分列数据并通过拆分数据得到结果

ruby-on-rails - 测试打印 Action

java - 用于移动原生应用程序自动化的 ruby​​ appium 或 java+appium