0

Ich habe eine polymorphe Beziehung in einer Buchrezensions-App erstellt, die ich schreibe. Meine App hat die verschachtelten Modelle: Stück >> Abschnitt >> Teilabschnitt >> Teilabschnitt, und ich habe ein Modell erstellt, das zu all diesen gehört, die KeyConcept genannt werden, wobei ich beabsichtige, dass jedes von diesen ein Schlüsselkonzept haben kann.LoadError in Controller # Index

Ich erhalte einen Fehler, den ich nicht verstehe, wenn ich versuche, die Indexaktion des keyconcepts-Controllers anzuzeigen. Ich denke, es könnte aufgrund eines Namenskonflikts sein, aber ich habe nicht genug Erfahrung, um es zu verstehen.

der Fehler Ich erhalte sieht wie folgt aus:

Unable to autoload constant KeyConceptsController, expected /home/david/Documents/Learning/StuddyBuddy/app/controllers/key_concepts_controller.rb to define it 

    else 
     require_or_load(expanded, qualified_name) 
     raise LoadError, "Unable to autoload constant #{qualified_name}, expected #{file_path} to define it" unless from_mod.const_defined?(const_name, false) 
     return from_mod.const_get(const_name) 
    end 
    elsif mod = autoload_module!(from_mod, const_name, qualified_name, path_suffix) 

Mein Schlüsselkonzepte Controller wie folgt aussieht:

key_concepts_controller.rb Klasse Key_conceptsController < Application KeyconceptsHelper umfassen

def whereami 
    if params[:piece_id] 
     @piece = Piece.find(params[:piece_id]) 
     @keyconcept = @piece.key_concepts.find(params[:id]) 

     here = @piece 
     parameter = :piece_id 
     type = "Piece" 
    elsif params[:section_id] 
     @section = Section.find(params[:section_id]) 
     @piece = @section.piece_id 
     @keyconcept = @section.key_concepts.find(params[:id]) 

     here = @section 
     parameter = :section_id 
     type = "Section" 
    elsif params[:subsection_id] 
     @subsection = Subsection.find(params[:subsection_id]) 
     @section = @subsection.section_id 
     @piece = Section.find([email protected]).piece_id 

     here = @subsection 
     parameter = :subsection_id 
     type = "Subsection" 
    elsif params[:subsubsection_id] 
     @subsubsection = Subsubsection.find(params[:subsubsection_id]) 
     @subsection = @subsubsection.subsection_id 
     @section = Subsection.find([email protected]).section_id 
     @piece = Section.find([email protected]).piece_id 

     here = @subsubsection 
     parameter = :subsubsection_id 
     type = "Subsubsection" 
    end 
end 

def redirect 
    if type == "Piece" 
     @redirect = redirect_to piece_path(@piece) 
    elsif type == "Section" 
     @redirect = redirect_to piece_section_path(@piece, @section) 
    elsif type == "Subsection" 
     @redirect = redirect_to piece_section_subsection_path(@piece, @section, @subsection) 
    elsif type == "Subsubsection" 
     @redirect = redirect_to piece_section_subsection_subsubsection_path(@piece, @section, @subsection, @subsubsection) 
    end 
end 

def index 
    whereami.call 
    @piece = Piece.find(params[:piece_id]) 
    @keyconcept = @piece.key_concepts.find(params[:id]) 
    @redirect = redirect.call 
end 

def show 
    whereami.call 
    redirect.call 
end 

def new 
    @keyconcept = KeyConcept.new 
    @keyconcept.conceptable_id = here.id 
end 

def create 
    whereami.call 

    @keyconcept = KeyConcept.new(keyconcept_params) 

    @keyconcept.conceptable_id = params[parameter] 
    @keyconcept.conceptable_type = type 
    @keyconcept.save 

    redirect.call 
end 

def destroy 
    here.destroy 
    redirect.call 
    flash.notice = "#{type} '#{here.name}' from '#{@piece.name}' deleted!" 
end 

def edit 
    whereami.call 
end 

def update 
    whereami.call 

    here.update(keyconcept_params) 
    flash.notice = "#{type} '#{here.name}' Updated!" 
    redirect.call 
end 


end 

die Link kommt von der Show-Aktion des Eltern Pie ce Modell hier:

<% @piece.key_concepts.each do |concept| %> 
<li> 
    <%= link_to concept.definition, [@piece, @keyconcept] %> 
    <!-- we didn't use #piece_key_concept_path(@piece, @keyconcept), class: 'section_name' and it worked --> 
</li> 

Wie verknüpfe ich auf die Schlüsselkonzepte „Show“ die Maßnahmen der Art und Weise? Ich havent in der Lage gewesen, so dass ich auf den Index Aktion nur verknüpft:/

So ist die routes.rb Datei sieht wie folgt aus:

resources :pieces do 
    resources :sections do 
    resources :subsections do 
     resources :subsubsections 
    end 
    end 
    resources :links 
end 

resources :pieces, :sections, :subsections, :subsubsections do 
    resources :connections, only: [:index, :new, :edit, :update, :destroy, :create] 
    resources :keyconcepts, only: [:index, :new, :edit, :update, :destroy, :create, :show] 
end 

key_concept.rb

class KeyConcept < ActiveRecord::Base 
    belongs_to :conceptable, polymorphic: true 
end 

piece.rb

class Piece < ActiveRecord::Base 
    include Connectable 
    include Conceptable 
    has_many :sections 
    has_many :subsections, through: :sections 
    has_many :links 
end 

in Modellen/Anliegen/conceptable.rb Modul Conceptable Active erweitern :: Concern

included do 
    has_many :keyconcepts, as: :conceptable 
    end 
end 
+0

Sie sicherlich neu scheint Schienen sein müssen –

Antwort

0

Nun das Problem Konvention

Ihre key_concepts_controller Klasse sollte benennt Namen

KeyConceptsController < ApplicationController 

Auch stellen sicher, dass Sie die richtige Konventionen

Wenn Ihr Modell folgen Name ist KeyConcept Dateiname muss key_concept.rb

sein

GeräteVName KeyConceptsController und Dateiname key_concepts_controller.rb

Das gleiche gilt für Strecken sollte

resources : key_concepts 

this siehe für weitere Einzelheiten

Verwandte Themen