代码之家  ›  专栏  ›  技术社区  ›  user8359832

我的索引页需要如何编写才能显示数据?

  •  1
  • user8359832  · 技术社区  · 9 年前

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

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

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

    在我的应用程序/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 回复  |  直到 9 年前
        1
  •  0
  •   Sebastián Palma    9 年前

    这取决于它有什么价值 @job ,请注意,当您在 jobs 分配一个名为 job @工作

    尝试 job.attribute

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

    @工作 在您的中不可用 index 视图,因为索引方法具有 @jobs @job.category 在你的表演方法中是因为你有一个 @工作 find_job 感谢 before_action 回调设置在第二行。