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

Rails: Trying to render image of users with same attribute

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

这是 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> 

我不断收到此错误消息:

undefined method `each' for 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列表?

在您的所有控制器操作中,您似乎都定义了@wdier 或@wdiers。但是在视图文件中你调用了两者。

在控制器的 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 排序,就像年鉴一样。