如何显示我的索引页面以显示数据?

时间:2017-08-03 01:31:24

标签: ruby-on-rails ruby

我正在开发一种首次下载的表单。在你们中的一些人的帮助下,到目前为止我已经取得了成功,但此时我正在创建app / index.html.erb页面:

<% @jobs.each do |job| %>
  <h2><%= @job.category %></h2>
  <p><%= @job.poster %></p>
<% end %>

上面的代码呈现以下错误:

NoMethodError in Jobs#index
undefined method `category' for nil:NilClass

我认为代码告诉我,我在类别中没有,所以我更新了类别以及rails控制台中的其他类别,但我仍然收到此错误,我不知道为什么以及如何解决它

在我的app / show.html.erb中,代码类似:

<h1><%= @job.category %></h1>
<p><%= @job.poster %></p>
<p><%= @job.location %></p>
<p><%= @job.description %></p>

<%= link_to "Home", root_path %>

它运作得很好。

这是我的部分形式:

<%= simple_form_for(@job, html: {class: 'form-horizontal'}) do |f| %>
  <div class="control-group">
    <%= f.label "Poster:", class: 'control-label' %>
    <div class="controls">
      <%= f.select(:poster, options_for_select([['Nick Maloney','Nick Maloney'],
        ['Peter Brown','Peter Brown'],['Jen Morris','Jen Morris']])) %>
    </div>
  </div>
  <div class="control-group">
    <%= f.label "Category:", class: 'control-label' %>
    <div class="controls">
      <%= f.select(:category, options_for_select([['Landscaping','Landscaping'],
        ['Babysitting','Babysitting'],['Tree planting','Tree planting']])) %>
    </div>
  </div>
  <div class="control-group">
    <%= f.label "Location:", class: 'control-label' %>
    <div class="controls">
      <%= f.select(:location, options_for_select([['Dorchester','Dorchester'],
        ['Roxbury','Roxbury'],['Mattapan','Mattapan']])) %>
    </div>
  </div>
  <div class="control-group">
    <%= f.label "Status:", class: 'control-label' %>
    <div class="controls">
      <%= f.select(:status, options_for_select([['New','New'],
        ['Pending','Pending'],['Complete','Complete']])) %>
    </div>
  </div>
  <%= f.input :description, label: "Job Description" %>
  <%= f.submit 'Add Job', class: 'btn btn-default' %>
<% end %>

这是我的jobs_controller.rb:

class JobsController < ApplicationController
  before_action :find_job, only: [:show, :edit, :update, :destroy]

  def index
    @jobs = Job.all.order("created_at DESC")
  end

  def show

  end

  def new
    @job = Job.new
  end

  def create
    @job = Job.new(jobs_params)

    if @job.save
      redirect_to @job, notice: 'Your job was successfully added'
    else
      render "New"
    end
  end

  def edit

  end

  def update

  end

  def destroy

  end

  private

  def jobs_params
    params.require(:job).permit(:poster, :category, :location, :status, :description)
  end

  def find_job
    @job = Job.find(params[:id])
  end
end

1 个答案:

答案 0 :(得分:0)

取决于具有@job的值,请注意,当您遍历jobs时,会分配一个名为job的块变量,但之后您想从{{获取类别属性1}},实例变量和Rails将尝试知道该变量的来源以及值是什么。

尝试@job

job.attribute

<% @jobs.each do |job| %> <h2><%= job.category %></h2> <p><%= job.poster %></p> <% end %> 在您的@job视图中不可用,因为您的索引方法有一个index变量,其中包含所有作业记录。您可以在show方法中访问@jobs的原因是因为您在私有方法@job.category中创建了@job变量,这种方法可以通过find_job回调获得设置在第二行。