0

私が書いている本のレビューアプリで多型関係を作成しました。私のアプリケーションは、ネストされたモデルを持っています:ピース>>セクション>>サブセクション>>サブセクションで、KeyConceptと呼ばれるこれらのすべてに属するモデルを作成しました。これらのそれぞれがキーコンセプトを持つことができます。 「ワンピース」モデルの「表示」ビューを表示しようとするとき、私は次のエラーを取得する:未初期化定数モデル::多型関係のエラー

NameError in Pieces#show 
uninitialized constant Piece::Keyconcept 

<h5>Summary: </h5><p><%= simple_format(@piece.summary) %></p> 
<br/> 
<% @piece.keyconcepts.each do |concept| %> 
    <li> 
     <%= link_to concept.definition, r, class: 'section_name' %> 
    </li> 

だから、routes.rbをファイルには、次のようになります。

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 

model.rbファイル次のようになります。モデル/懸念/ conceptable.rbで

module Conceptable 
    extend ActiveSupport::Concern 

    included do 
    has_many :keyconcepts, as: :conceptable 
    end 
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 

これは、コントローラに問題がある場合、私は知らないのですか?

class KeyconceptsController < ApplicationController 
    include KeyconceptsHelper 

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

      here = @piece 
      parameter = :piece_id 
      type = "Piece" 
     elsif params[:section_id] 
      @section = ::Section.find(params[:section_id]) 
      @piece = @section.piece_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_to piece_path(@piece) 
    elsif type == "Section" 
     redirect_to piece_section_path(@piece, @section) 
    elsif type == "Subsection" 
     redirect_to piece_section_subsection_path(@piece, @section, @subsection) 
    elsif type == "Subsubsection" 
     redirect_to piece_section_subsection_subsubsection_path(@piece, @section, @subsection, @subsubsection) 
    end 
end 

def index 
    whereami.call 
end 

def show 
    whereami.call 
    r = 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 

コンソールをリロードしても同じエラーが表示されます。私はまた、コンソールといくつかのことをやろうとしました。これは:Piece.first.keyconcepts、動作しません(私は同じNameErrorを取得します:初期化されていない定数Piece :: Keyconcept)しかし、これ:KeyConcept.firstは、私はまだ何もインスタンスを作成していないので、私はゼロになる。

私は、エラーメッセージに「Keyconcept」と「Camelcase KeyConcept」とは言いません。これは問題がある場所だと思うが、それを理解するのに十分な経験はない。

私はこれを解決するために助けていただきありがとうございます!

+1

最初の記述では、モデルが 'KeyConcept'であると言っていますが、あなたの関係などでキーコンセプトではなくkey_concepts(それはコンセプトのCが大文字になっているはずです)ではなく、 /大文字問題? –

答えて

0

ここでの問題は、次のされていないされて適切な規則

keyconcept.rb

keyconceptにKeyconceptとFILE_NAMEにモデル名を変更します。あなたは次のような場所にkey_conceptskeyconceptsを変更する必要がありますRB

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

OR

  • ルート

    resources :keyconcepts 
    
  • コントローラ名

    class KeyConceptsController < ApplicationController 
        ... 
    end 
    
  • コントローラファイル名

  • 強いのparams

    def key_concept_params 
        params.require(:key_concept).permit(:your, :params) 
    end 
    
  • 団体

    has_many :key_concepts 
    
+0

それは働いた!ありがとうございました。 – Kingdavidek

関連する問題