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

时间:2019-09-08 14:26:47

标签: ruby-on-rails devise posts

由于我试图在用户的个人资料页面上添加来自用户的帖子,因此我在Rails应用程序上感到很挣扎。 我正在使用设备,并且已经在网上寻找解决方案,但是似乎没有一个工作。

我正在运行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 %>

3 个答案:

答案 0 :(得分:2)

您在节目中抓住了@user,但是随后您使用current_user.posts来设置@posts。那应该是@user.posts

答案 1 :(得分:0)

好的, 稍微rake db:migrate并重新启动服务器后,一切似乎都可以正常工作。没有任何改变。

答案 2 :(得分:0)

找到解决方案后,这里是建议。

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!以获取当前用户,在大多数情况下,用户需要登录才能查看/编辑其个人资料,因此我们应要求用户登录
  • 更改为@user = current_user,因为现在登录的用户是我们需要显示或编辑的用户对象