Rails:尝试渲染具有相同属性的用户的图像

时间:2016-05-29 23:17:00

标签: ruby-on-rails ruby activerecord views erb

我正在Rails中制作年鉴。我目前正在尝试显示所有Wdiers(这是教师和学生的组合)的图像列表,这些图像与wdier的个人资料页面(又称squad_id视图)具有相同的show。这将在squad_name页面上的Wdier的show下呈现。

以下是show视图:

  <div class="squadGallery">
    <ul class="grid">
      <div class="index">
        <h2> <%= @wdier.squad_name %></h2>
        <% @wdiers.each do |wdier| %>
        <%= link_to image_tag(wdier.img_url), wdier_path(wdier) %>
        <% end %>
      </ul>
    </div>
  </div> 

我不断收到此错误消息:

  

未定义的方法`each'代表nil:NilClass

这是我的wdiers控制器:

class WdiersController < ApplicationController
  def index
    @wdiers = Wdier.all
  end

  def new
    @wdier = Wdier.new
  end

  def create
    @wdier = Wdier.create!(wdier_params)

    redirect_to wdiers_path(@wdier)
  end

  def show
    @wdier = Wdier.find(params[:id])
  end

  def edit
    @wdier = Wdier.find(params[:id])
  end

  def update
    @wdier = Wdier.find(params[:id])
    @wdier.update(wdier_params)

    redirect_to wdier_path(@wdier)
  end

  def destroy
    @wdier = Wdier.find(params[:id])
    @wdier.destroy

    redirect_to wdiers_path(@wdier)
  end

  def wdier_params
    params.require(:wdier).permit(:name, :img_url, :squad_name, :squad_id, :quote, :teaching, :memory, :favlang, :wisewords, :tag_list,:github_url, :portfolio_url, :project1_url, :project2_url, :project3_url, :quote, :q1, :q2, :q3, :fb, :linkedin, :email, :role,  :student_id, :instructor_id)
  end
end

这是我的wdiers架构:

create_table "wdiers", force: :cascade do |t|
    t.string  "name"
    t.string  "img_url"
    t.string  "github_url"
    t.string  "portfolio_url"
    t.string  "project1_url"
    t.string  "project2_url"
    t.string  "project3_url"
    t.string  "quote"
    t.string  "squad_name"
    t.integer "teaching"
    t.integer "memory"
    t.integer "favlang"
    t.integer "wisewords"
    t.integer "tag_list"
    t.integer "q1"
    t.integer "q2"
    t.integer "q3"
    t.integer "fb"
    t.integer "linkedin"
    t.integer "email"
    t.integer "role"
    t.integer "password"
    t.integer "squad_id"
    t.integer "codey_id"
    t.integer "student_id"
    t.integer "instructor_id"
  end

  add_index "wdiers", ["codey_id"], name: "index_wdiers_on_codey_id", using: :btree
  add_index "wdiers", ["instructor_id"], name: "index_wdiers_on_instructor_id", using: :btree
  add_index "wdiers", ["squad_id"], name: "index_wdiers_on_squad_id", using: :btree
  add_index "wdiers", ["student_id"], name: "index_wdiers_on_student_id", using: :btree

  add_foreign_key "comments", "wdiers"
end

如何解决当前错误并在同一小队中显示Wdiers列表?

2 个答案:

答案 0 :(得分:2)

在所有控制器操作中,您似乎都定义了@wdier或@wdiers。但在视图文件中,您同时调用它们。

答案 1 :(得分:2)

在控制器的show操作中,您需要搜索小队成员:

  def show
    @wdier = Wdier.find(params[:id])
    @wdiers = Wdier.where(squad_id: @wdier.squad_id).not(id: @wdier.id).order(:name)
  end

这将检索@wdiers所有具有相同squad_id的Wdiers。 show页面上的Wdier被排除在小队列表之外,因为Wdier已经显示在show页面上。 Wdiers列表按name排序,就像年鉴一样。