ruby-on-rails ruby sqlite ruby-on-rails-4 ruby-2.1

ruby on rails - Dependencia circular detectada con constante de carga automática(Rails 4, Ruby 2)



ruby-on-rails sqlite (1)

El problema no fue ninguno de estos. En realidad, mi modelo de Paint contenía un campo llamado :type , que es una palabra clave reservada para metaclase o algo así. #RubyOnRails a la #RubyOnRails de #RubyOnRails ayudó afortunadamente, de lo contrario, un novato como yo habría intentado comenzar de cero, tropezar con el mismo problema y nunca lo habría descubierto. Espero que esto ayude a un futuro miembro de Google. ¡Pagalo despues!

configs / routes.rb Shutters y Paints son recursos secundarios de Jobs .

resources :jobs do resources :shutters resources :paints end

app / models / job.rb Un Job contiene muchos Shutters y muchas Paints .

class Job < ActiveRecord::Base has_many :shutters, dependent: :delete_all has_many :paints, dependent: :delete_all accepts_nested_attributes_for :shutters, allow_destroy: true, :reject_if => lambda { |a| a[:no].blank? } accepts_nested_attributes_for :paints, allow_destroy: true, :reject_if => lambda { |a| a[:name].blank? }`

app / models / shutter.rb Un Shutter contiene pertenece a un Job y una Paint .

class Shutter < ActiveRecord::Base belongs_to :job belongs_to :paint

app / models / paint.rb Una Paint pertenece a un Job pero puede ser referenciada por muchos Shutters en ese trabajo.

class Paint < ActiveRecord::Base belongs_to :job has_many :shutters

Tanto Jobs#show como Jobs#edit funcionan bien con el código <%= debug @job.paints %> si ya no hay Paints en la base de datos. Pero en el momento en que se agrega una pintura, se genera un RuntimeError, "Dependencia circular detectada mientras se carga automáticamente la PINTURA constante".

¿Cuál es la mejor manera de corregir este error?

Editar: información del controlador

app / controllers / jobs_controller.rb

class JobsController < ApplicationController before_action :set_job, only: [:show, :edit, :update, :destroy] ... # GET /jobs/1 # GET /jobs/1.json def show end # GET /jobs/new def new @job = Job.new @job.shutters.build @job.paints.build end # GET /jobs/1/edit def edit @job.shutters.build @job.paints.build end

app / controllers / shutters_controller.rb

class ShuttersController < ApplicationController def new @shutter = Shutter.new end def destroy @shutter = Shutter.find(params[:id]) @job = Job.find(@shutter[:job_id]) @shutter.destroy respond_to do |format| format.html {redirect_to @job, notice: ''Shutter was succesfully deleted.'' } end end end

app / controllers / paints_controller.rb

class PaintsController < ApplicationController def new @paint = Paint.new end def destroy @paint = Paint.find(params[:id]) @job = Job.find(@paint[:job_id]) @paint.destroy respond_to do |format| format.html {redirect_to @job, notice: ''Paint was succesfully deleted.'' } end end end