2017-12-08 16 views
1

なぜ私のインデックス操作を私のビューに渡すことができないのかわかりません。基本的に私は、 "最近の仕事"と呼ばれる部分的な "仕事"と呼ばれるコントローラを持っていて、 "static_pages"という別のcontollersビューにその "最近の仕事"を部分的に表示したい。rails - 他のコントローラの表示に部分的に表示

私は私がしなければならないだろう、すべては私のstatic_pages/home.html.erbに以下の呼び出しであることを考えた:

<%= render partial: "jobs/recent_jobs" %> 

が、ここでは私が取得エラーです。明らかに@仕事はnilです。あなたは、@jobsでの作業、そしてあなたがそれを最初に定義する必要がありstatic_pages#homeをレンダリングしているとして、ここで

ActionView::Template::Error (undefined method `each' for nil:NilClass): 
2: <div class="homepage_recent_jobs"> 
3: <div class="container"> 
4:  
5:  <% @jobs.each do |job| %> 
6:  <% job.title %> 
7:  <% end %> 
8:  

は、ジョブコントローラ

<div class="homepage_recent_jobs"> 
     <div class="container"> 

     <% @jobs.each do |job| %> 
      <% job.title %> 
     <% end %> 
    </div> 
    </div> 

ジョブ・インデックス・アクション

def index 

    set_link_order_and_counters  

    @jobs = Job.all 

    # calls scopes 
    if params[:experience].present? 
    @jobs = @jobs.by_experience(params[:experience]) 
    end 

    if params[:num_days_past].present? 
    @jobs = @jobs.by_num_days_past(params[:num_days_past].to_i) 
    end  


    @jobs = @jobs.paginate(page: params[:page], per_page: 5) 
end 
+0

私がテストを開始したとき、部分的にローカル変数を渡す必要はなく、最初に言及したように各ブロックを修正する必要はないことに気付きました。必要なのは、@jobs = Job.allをstatic_pagesホームコントローラに追加するだけでした。コメントの中でこのことをさらに言及したので、私はその答えに投票しました。あなたのコメントを別の答えにしたいのであれば、私は正しい印を付けることができます。私はちょうど誰かが混乱するために同じ問題を抱えていた未来を望んでいない。ご協力いただきありがとうございます。 – Scott

+0

あなたは正しいです。私は答えを更新しました。 –

答えて

2

の私の部分ですjobs#indexにしか定義されていないので、ビューがレンダリングされるときに値はnilです。

class StaticPagesController < ApplicationController 
    def home 
    @jobs = Job.all 
    end 
end 

をそして<%= render 'jobs/recent_jobs' %> Railsの推論で部分的なファイル、partialオプションを使用する必要はありませんがある点に注意してください。適切なコントローラで@jobsを追加

は動作するはずです。またジョブのタイトルを印刷するには、<%= %>を使用する必要があります。

+0

まだ欠けているものは、コントローラで部分をレンダリングして@jobsに割り当てるジョブをフェッチする必要があると思います。 –

+0

私は「@jobs = Job.all」と表示しますが、 'jobs#index '、そして彼は静的ページ#home'の部分をレンダリングしていますが、それはまだ分かりません。 –

+0

はいstatic_pages#homeの "recent_jobs"部分をレンダリングしようとしています。私は@SebastianPalmaから上記の提案を試みましたが、私はまだ同じエラーを受け取ります – Scott

関連する問題