如何显示谁访问了 Rails 中的用户个人资料?

How to show who has visited a User's profile in Rails?

有一个关于设置如何使用 rails 在我的应用程序上显示谁访问过用户个人资料的快速问题?我正在按照这个问题的公认答案 - How to show who has visited your profile? 但 运行 进入一个让我有点困惑的错误。我在下面列出了我收到的错误和我的相关代码:

我的用户控制器中出现两个错误

错误 1:未定义的方法 visits' for nil:NilClass Error2: can't write unknown attributevisitor_id` >> 每当我访问用户的个人资料时

用户控制器

class UsersController < ApplicationController
before_action :set_user, only: [:show, :edit, :update, :destroy, :share, :follow]
before_action :create_visit

def show
@user = User.find(params[:id])
@visitprofiles = current_user.visitors.where('created_at > ?', 1.month.ago)
end
private

def set_user
    @user = User.find(params[:id])  
end

def create_visit
@user.visits.create(visitor: current_user)
end

User.rb

class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable, :omniauthable, omniauth_providers: [:facebook]




has_many :visits
has_many :visitors, through: :visits

Visit.rb

class Visit < ApplicationRecord
belongs_to :user
belongs_to :visitor, class_name: 'User', foreign_key: 'visitor_id'
end

因为你的@usernil

您有 before_action :set_user,但未在 create_user 之前调用。

在您的 create_user 中,您的 @user 未设置,因此为零。

两个用于调试的 gem

您应该看到代码在哪里被破坏。 Better errors and Binding or callers 是我发现对快速调试有用的两个 gem Rails app.

您的代码存在另一个问题

set_usershow 之前,并且您在 show 方法中使用完全相同的逻辑来查找用户。这不是干的。