从另一个控制器调用时 nil:NilClass 的未定义方法“each”

undefined method `each' for nil:NilClass when calling from another controller

我试图触发 groups/show 视图中的所有帖子,但出现错误 "undefined method `each' for nil:NilClass"。有谁能帮帮我吗?

~~对我糟糕的编码行为感到抱歉

posts_controller:

class PostsController < ApplicationController

  def index
    @posts = Post.all
  end

  def show
    @post = Post.find(params[:id])
  end

  def new
    @post = Post.new
  end

  def create
    post = Post.create(permitted_params)
    redirect_to post
  end

  def edit
    @post = Post.find(params[:id])
  end

  def update
    post = Post.find(params[:id])
    post.update permitted_params
    redirect_to post
  end

  def destroy
    Post.destroy(params[:id])
    redirect_to posts_path
  end

  def permitted_params
    params.require(:post).permit(:message)
  end

end

groups_controller:

class GroupsController < ApplicationController

  def index
  end

  def show
    @group = Group.find(params[:id])
  end


  def new
    @group = Group.new
  end

  def create
    group = Group.create(permitted_params)
    redirect_to group
  end

    def permitted_params
      params.require(:group).permit(:name)
  end

end

groups/show.html.erb:

<div class="container">
<p><i><%= @post.message %></i><p>

  <%= render 'posts/each' %>

  <% if user_signed_in? %>
  <p><%= link_to "Powrót", root_path %></p>
  <p><%= link_to "Usuń wiadomość", @post, method: :delete, data: { confirm: 'Jesteś pewien?' } %></p>
  <% end %>
</div>

_each.html.erb:

  <% @posts.each do |post| %>
    <ul><i><%= link_to post.message, post %></i></ul></br>
  <% end %>

路线:

devise_for :users

  root 'posts#index'

  resources :posts
  resources :groups

  get 'posts/each' => 'posts#each'
  get 'posts/group1' => 'posts#group1'

groups_controller 的 'show' 操作中没有 @post 变量。 可能您需要一些表演动作,例如:

@posts = Post.where(group_id: @group.id)

此外,当您从另一个文件夹渲染部分内容时,您必须传递实例变量的值(如果我错了请纠正我)。例如

<%= render 'posts/each', {posts: @posts} %>

并通过 'posts' 而不是 '@posts'

进行迭代

在groups_controller.rb

def show
  @group = Group.find(params[:id])
  @posts = Post.where(group_id: @group_id)
end

在 groups/show.html.erb

<div class="container">

  <%= render 'posts/each', {posts: @posts} %>

  <% if user_signed_in? %>
    <p><%= link_to "Powrót", root_path %></p>
    <p><%= link_to "Usuń wiadomość", @post, method: :delete, data: { confirm:'Jesteś pewien?' } %></p>
  <% end %>
</div>

在 posts/_each.html.erb

<% posts.each do |post| %>
  <ul><i><%= link_to post.message, post %></i></ul></br>
<% end %>