nil:NilClass | 我得到一个未定义的方法“each”尝试将帖子添加到用户个人资料

I'm getting an undefined method `each' for nil:NilClass | Trying to add posts to users profiles

我在使用 rails 应用程序时遇到了困难,因为我试图将用户的帖子添加到他们的个人资料页面上。 我正在使用设备并在网上寻找解决方案,但 none 似乎有效。

我是 运行 Rails 服务器 5.2。

这是我的一些代码:

#app/models/user.rb
class User < ActiveRecord::Base
   has_many :posts
end

#app/models/post.rb
class Post < ActiveRecord::Base
   belongs_to :user
end

这是users.controller.rb

class UsersController < ApplicationController
  def show
    @user = User.find(params[:id])

    @posts = current_user.posts
  end

end

和我的 posts_controller.rb :

class PostsController < ApplicationController
  before_action :set_post, only: [:show, :edit, :update, :destroy]
  before_action :authenticate_user!, except: [:show, :index]
  # GET /posts
  # GET /posts.json
  def index
    @posts = Post.all
  end

这是users/show.html.erb

<%= @user.about %>

  <% @posts.each do |post| %>
    <%= post.title %>
<% end %>

它似乎不起作用,因为我遇到了这个特定错误: nil:NilClass

的未定义方法“each”
<%= @user.about %>

  <% @posts.each do |post| %>
    <%= post.title %>
<% end %>

你在你的节目中抓住了@user,但是你用current_user.posts设置了@posts。那应该是 @user.posts

好的, 在做了一些 rake db:migrate 并重新启动服务器后,一切似乎都正常了。没有改变任何东西。

既然您找到了解决方案,这里是建议。

class UsersController < ApplicationController
  def show
    @user = User.find(params[:id])

    @posts = current_user.posts
  end
end

改为

class UsersController < ApplicationController
  before_action :authenticate_user!

  def show
    @user = current_user
    @posts = current_user.posts
  end
end
  • 添加before_action :authenticate_user!以获取当前用户,在大多数情况下用户需要登录才能view/edit他们的个人资料,因此我们应该要求用户登录
  • 更改为 @user = current_user 因为现在登录用户是我们需要显示或编辑的用户对象