由于我试图在用户的个人资料页面上添加来自用户的帖子,因此我在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 %>
答案 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
,因为现在登录的用户是我们需要显示或编辑的用户对象