Accepts_nested_attributes 导致 Rails 中的堆栈级别太深

Vir*_*ren 1 ruby ruby-on-rails ruby-on-rails-4

我有一个非常基本的例子

应用程序/模型/user.rb

#name string
class User < ActiveRecord::Base
  has_one :project,dependent: :destroy
  validates :name,presence: true
  validates_associated :project
  accepts_nested_attributes_for :project
end
Run Code Online (Sandbox Code Playgroud)

应用程序/模型/project.rb

#name      string
#user_id   integer
class Project < ActiveRecord::Base
  belongs_to :user
  has_many :tasks,dependent: :destroy
  validates :name,presence: true
  validates_associated :tasks
  accepts_nested_attributes_for :tasks
end
Run Code Online (Sandbox Code Playgroud)

应用程序/模型/tasks.rb

#name   string
#project_id  integer
class Task < ActiveRecord::Base
  belongs_to :project,dependent: :destroy
  validates :name,presence: true
end
Run Code Online (Sandbox Code Playgroud)

这就是我模型中的全部内容

在控制器端出于测试目的,我有以下代码。

应用程序/控制器/user_controller.rb

def update
    @user.project_attributes = {:name  => "P#rand(100)",:tasks_attributes => [{name: "Task#{rand(100)}"}]}

    respond_to do |format|
      if @user.save
        format.html { redirect_to @user, notice: 'User was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

每次我尝试更新给定用户时,都会遇到stack level too deep 问题

有什么线索吗?

笔记 :

Rails version 4.0.4 
Ruby 2.1.2p95
Run Code Online (Sandbox Code Playgroud)

Ars*_*Ali 5

dependent: :destroy仅在共享关联的模型之一中写入。如果两个模型都有dependent: :destroy,则会进行无限次调用,导致堆栈级别太深错误发生。