1

ナビゲーションバーのドロップダウンメニューから記事にアクセスできる必要があります。レールアプリのナビバーから記事にアクセスするときに未定義のメソッド 'each'

私のviews/application/_navbar.html.erb私は以下のコードを抜粋しています。それは動作していないと私はアプリがhttp://localhost:3000/lcas/1

は私だけので、各カテゴリ内の最初の記事にアクセスできるようにする必要があります正しい道に行くドロップダウン内のリンクを打ったとき、私はいつもこのエラーundefined method 'each' for nil:NilClass

を取得しますhttp://localhost:3000/lcas/1は私index.html.erbオンviews/application/_navbar.html.erb

<ul class="dropdown-menu"> 
      <% @lcas.each do |lca| %> 
      <li><%= link_to lca.title, lca_path(lca) %></li> 
      <% end %> 
      <% @energy_analyses.each do |energy_analysis| %> 
      <li><%=link_to energy_analysis.title, energy_analysis_path(energy_analysis) %></li> 
      <% end %> 
      <% @green_accountings.each do |green_accounting| %> 
      <li><%= link_to green_accounting.title, green_accounting_path(green_accounting) %></li> 
      <% end %> 
      <li class="divider"></li> 
      <li><a href="#">Something</a></li> 
      <li class="divider"></li> 
      <li><a href="#">something</a></li> 
      </ul> 

からドロップダウン

コードの最初のリンクのための正しい道である私は基本的にSを持っていますそれは動作します。

<% @lcas.each do |lca| %> 
     <div class="col-md-4 col-xs-12"> 
      <span class="glyphicon glyphicon-tasks icons" aria-hidden="true"> </span> 
      <div class="panel-heading"> 
       <h3 class="panel-title"><%= link_to lca.title, lca_path(lca) %></h3> 
      </div> 
     </div> 
     <% end %> 

私は、任意の成功application_controller.rbではなくアウトに

@lcas = Lca.all 
@energy_analyses = EnergyAnalysis.all 
@green_accountings = GreenAccounting.all 

を追加しようとしました。ここ

は、誰かがこのを通して私を導くことができれば、それは非常にいいだろうlcas_controller.rb

class LcasController < InheritedResources::Base 

private 

def lca_params 
    params.require(:lca).permit(:title, :body, :image) 
end 
end 

です。

+0

を? – cobaltsoda

+0

in its views/application/_navbar.html.erb – DaudiHell

+1

インスタンス変数をクラス定義の中に直接置くのではなく、インスタンス変数を設定する 'application_controller.rb'に' before_action'を追加してみてください。 – cobaltsoda

答えて

1

あなたはおそらく、いくつかのことを必要とする: は必ずお互いのコントローラがそれを呼び出しを行うと、それに対応するビューに変数を渡すためにapplication_controller.rbにこれらの変数のためのbefore_action方法を設定します。

before_action :set_vars 

    def set_vars 
    @lcas = Lca.all 
    @energy_analyses = EnergyAnalysis.all 
    @green_accountings = GreenAccounting.all 
    end 

今あなたがする必要がありますあなたの部分から@lcasにアクセスすることができるが、あなたがそれに地元の人々を渡す必要がありますので、パーシャルでインスタンス変数を使用すると、MVCに違反している:

<%= render 'application/navbar', :lcas => @lcas %> 

ないかもしれない、このように、複数の地元の人々を渡す方法を確認してください:

<%= render 'shared/navbar', locals: {:lcas => @lcas, :energy => @energy_analyses, :green => @green_accountings} %> 

そしてもちろん地元の人々を渡した場合、部分的で@使用しません:ファイルがのドロップダウンメニューコードで表示

<% energy.each do |energy_analysis| %> 
関連する問題