首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Rails 6.1中:"ActiveRecord::RecordNotSaved :未能删除现有的关联页面。“

在Rails 6.1中:"ActiveRecord::RecordNotSaved :未能删除现有的关联页面。“
EN

Stack Overflow用户
提问于 2021-09-21 06:37:57
回答 1查看 202关注 0票数 1

我希望使用Nil命令删除两个表之间的关联。

主题模型看起来像subject.rb

代码语言:javascript
运行
复制
class Subject < ApplicationRecord

has_one :page
# subject has one page

# scope :visible, -> { where(visible: true) }
# scope :invisible, -> { where(visible: false) }
# scope :sorted, -> { order("position ASC") }
# scope :newest_first, -> { order("created_at DESC") } 

scope :visible, lambda  { where(visible: true) }
scope :invisible, lambda  { where(visible: false) }
scope :sorted, lambda { order("position ASC") }
scope :newest_first, lambda { order("created_at DESC") } 
scope :search, lambda { |query| where(['name LIKE ?', "%#{query}%"]) }

end Page模型如下

page.rb

代码语言:javascript
运行
复制
 class Page < ApplicationRecord
 # foreign key
    belongs_to :subject
  end

页面迁移的文件看起来像

20210919102818_create_pages.rb

代码语言:javascript
运行
复制
class CreatePages < ActiveRecord::Migration[6.1]
def up
 create_table :pages do |t|

    t.integer "subject_id"
    t.string "name"
    t.string "permalink"
    t.integer "position"
    t.boolean "visible", default:false
    t.timestamps
   end
   add_index :pages, :subject_id
   add_index :pages, :permalink
 end
  def down
    drop_table :pages
   end
 end 

主题迁移文件看起来像

20210919102807_create_subjects.rb

代码语言:javascript
运行
复制
    class CreatePages < ActiveRecord::Migration[6.1]
  def up
    create_table :pages do |t|

      t.integer "subject_id"
      t.string "name"
      t.string "permalink"
      t.integer "position"
      t.boolean "visible", default:false
      t.timestamps
    end
    add_index :pages, :subject_id
    add_index :pages, :permalink
  end
  def down
    drop_table :pages
  end
end 

使用零的错误部分。它显示了

ActiveRecord::RecordNotSaved (未能删除现有关联页)。在外键设置为零后,记录无法保存。)

误差图

EN

回答 1

Stack Overflow用户

发布于 2022-04-05 23:07:39

正如在这个博客中所解释的,原因是因为对Rails 5+的更改,其中"belongs_to“有一个隐含的存在验证,这使得它不能被设置为零。发布说明提供了一个解决方案

代码语言:javascript
运行
复制
belongs_to :subject, optional: true

在你的案子里。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69264398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档