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

rails - display partial in another controllers view

我不确定为什么我无法将索引操作传递到我的视图。基本上我有一个名为 "jobs" 的控制器和一个名为 "recent jobs" 的部分,我想在另一个名为 "static_pages".

的控制器视图中显示 "recent jobs" 部分

我认为我所要做的就是在 static_pages/home.html.erb:

中调用以下内容
    <%= render partial: "jobs/recent_jobs" %>

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

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

当您使用 @jobs 并渲染 static_pages#home 时,您需要先定义它,您只在 jobs#index 中定义了它,这就是为什么当视图呈现的值为 nil.

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

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

并且注意用<%= render 'jobs/recent_jobs' %> Rails推断是一个部分文件,不需要使用partial选项。此外,要打印职位名称,您需要使用 <%= %>.