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
因为现在登录用户是我们需要显示或编辑的用户对象
我在使用 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
因为现在登录用户是我们需要显示或编辑的用户对象