rails - 在另一个控制器视图中显示部分

时间:2017-12-08 21:59:09

标签: ruby-on-rails ruby-on-rails-5.1

我不确定为什么我无法将索引操作传递给我的视图。基本上我有一个名为" jobs"部分被称为"最近的工作"我想展示那些"最近的工作"另一个控制器视图中的部分名为" static_pages"。

我认为我所要做的就是在我的static_pages / home.html.erb中调用以下内容:

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

但这是我得到的错误。显然@jobs是零。

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

1 个答案:

答案 0 :(得分:2)

当您正在使用@jobs并渲染static_pages#home时,您需要先定义它,您只能在jobs#index中对其进行定义,并且&#39 ; s为什么在呈现视图时值为nil

在适当的控制器中添加@jobs应该有效:

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

注意<%= render 'jobs/recent_jobs' %> Rails推断是一个部分文件,不需要使用partial选项。另外,要打印作业的标题,您需要使用<%= %>