从另一个控制器调用时 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 %>
我试图触发 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 %>