2017-02-02 5 views
0

私は問題を見つけることができません。私の会場showテンプレートでは、私は会場名を表示したい、そしてその下に、私は、データベース未定義のメソッド `each 'for nil:表示アクションのNilClass

<%= venu.name %> 
<% @venus.each do |v| %> 

内のすべての会場は、私は@venusnilあるというエラーが出る...しかし、それは私の中で定義されているリストコントローラ:

undefined method 'each' for nil:NilClass

venues_controller.rb

class VenuesController < ApplicationController 
    before_action :find_venue, only: [:show, :edit, :update, :destroy] 
     def index 
      @venus = Venue.all 
     end 

     def show 
     render :layout => nil 
     @venus = Venue.all 
     end 

     def new 
      @venu = Venue.new 
     end 

     def create 
      @venu = Venue.new(venue_params) 
      @venu.save 
     end 

     def edit 
     end 

     def update 
     end 

     def destroy 
     end 

     private 

     def venue_params 
      params.require(:venue).permit(:name, :phone, :address, :description, :type) 
     end 

     def find_venue 
      @venu = Venue.find(params[:id]) 
     end 
    end 

私はにresources :venuesルートを持っています。

この問題の原因はわかりません。

答えて

1

を使用する必要がある、あなたが終わり

def show 
    @venus = Venue.all 
    render :layout => nil 
end 
1

showアクションからrender :layout => nilを削除してください。あなたが使用する理由

そして、あなたのビューで、あなたのshow方法では、インスタンスに変数@venu代わりのvenu

<%= @venu.name %> 
1

でレンダリングする必要があるのだろうかアクションの2つのインスタンス変数show

@venu(経由)アクション自体を介して、before_filter)& @venusに送信されます。

showからこの行を削除することをお勧めします。通常、リストから1つの要素の詳細を表示するのには、アクションが使用されます。

@venus = Venue.all 

、代わりにbefore_filter@venuセットを使用します。


しかし、あなたがshow.html.erb@venuvenuを変更し、必要であれば、またshowアクションで再度オーダーライン

@venus = Venue.all 
render :layout => nil 

の両方を維持したい場合は、のタイプミスを修正しますインスタンス変数@venu =>@venue :)(私たちのいずれかに起こる可能性があります)

1

通常、indexメソッドでは、すべてvenusshowメソッドでは、それぞれvenueの詳細ビューが表示されます。

このようなものを設定してみてください:

def index 
@venus = Venue.all 
end 

def show 
render :layout => nil 
@venue = Venue.find(params[:id]) 
end 

は今show.html.erbにあなたが

@venue.name 

とあなたのindex.html.erbでを使用することができるはずです、あなたがそうのような金星を反復処理することができます

<% @venus.each do |v| %> 
<%= link_to v do %> 
    <%= v.name %> 
<% end %> 
<% end %> 
1

上記の答えは正しいです。表示ビューで@venus = Venue.allを使用できますが、最初にレンダリングするとエラーが表示されるためです。最後にレンダリングするだけです。

関連する問題