2017-07-26 6 views
0

ビルドと呼ばれるキャンペーンコントローラに顧客アクションを作成しようとしています。Railsカスタムアクションがショーのために動作しない、修正する方法?

http://localhost:3000/campaigns/building

エラーを表示します

Showing .../app/views/campaigns/show.html.erb where line #1 raised: 

undefined method `name' for nil:NilClass 

<h2><%= @campaign.name %></h2> 
<p> 
    Created by: <%= @campaign.user.email %> <%= time_ago_in_words(@campaign.created_at) %> ago. 
</p> 
<h5>Website: <%= @campaign.website %></h5> 

マイroutesファイル:

resources :campaigns do 
    resources :targets 
    end 

    get "campaigns/building" => "campaigns#building", :as => :campaigns_building 

コントローラー:

class CampaignsController < ApplicationController 
    before_action :find_campaign, only: [:show, :edit, :update, :destroy] 
    before_action :authenticate_user! 
    def show 
    end 

    def building 
    end 
... 

マイshow.html.erb:

<h2><%= @campaign.name %></h2> 
<p> 
    Created by: <%= @campaign.user.email %> <%= time_ago_in_words(@campaign.created_at) %> ago. 
</p> 
<h5>Website: <%= @campaign.website %></h5> 

このエラーが発生しないようにするにはどうすればよいですか?

+0

collectionルートとしてそれを定義することができますあなたの 'CampaignsController'の' show'アクションで) – jvillian

+0

__find_campaign__メソッドとは何ですか? –

+0

*ビルドと呼ばれるキャンペーンコントローラに顧客アクションを作成しようとしています*あなたは*カスタムアクション*を意味しますか? – Pavan

答えて

0

カスタムルートを作成しようとしていて、動作させることができないようです。もしそうなら、それを動作させるために、あなたはデフォルト機知ルートとの競合を避けるために、resourcesの上ごカスタムルートを移動し、正しくbuildingアクション

get "campaigns/building" => "campaigns#building", :as => :campaigns_building 
resources :campaigns do 
    resources :targets 
end 

へのルートべきでRailsが始まるルートを一致させようとするためですトップダウンから。また、あなたはそれがあなたの `@のcampaign`変数に` Campaign`のインスタンスを割り当て、 `@のcampaign`ないゼロ(すなわちを行うことによって、このエラーを与えていない作るresources

resources :campaigns do 
    get "building", on: :collection 
    resources :targets 
end 
関連する問題