【问题标题】:Ruby on Rails 5 setting has_one child to nil fails in consoleRuby on Rails 5 将 has_one child 设置为 nil 在控制台中失败
【发布时间】:2018-02-28 16:39:08
【问题描述】:

我目前正在学习 Lynda 上的 Ruby on Rails Essentials 5 培训课程,在一对一关联部分中,我创建了一个包含“页面”的“主题”。每个模型如下所示:

class Subject < ApplicationRecord

    has_one :page

    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

/////

class Page < ApplicationRecord

    belongs_to :subject

end

在数据库中,我有一个现有的主题,我通过 id 找到并保存到变量中。然后我创建一个新的 Page 对象(但不保存它),最后,我通过执行 subject.page = page.问题是,当我尝试使用 subject.page = nil 删除关联时,最终出现以下错误:

irb(main):004:0> subject.page = nil
   (0.3ms)  BEGIN
   (0.2ms)  ROLLBACK
ActiveRecord::RecordNotSaved: Failed to remove the existing associated 
page. The record failed to save after its foreign key was set to nil.
    from (irb):4

我相信预期的行为是将页面记录的外键重新分配为 NULL。这种行为反映在我正在使用的教程以及有关该主题的其他帖子中。我在这里错过了什么?

【问题讨论】:

标签: ruby-on-rails ruby


【解决方案1】:

自 rails 5 以来,belongs_to 关联的行为发生了变化。 它检查关联的记录是否持续存在,如果不存在,则抛出错误。

如果你想保持页面对象没有关联,你应该添加 属于_to:主题,可选:true

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多