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



>有一个关于设置如何使用轨道在我的应用程序上显示谁访问过用户个人资料的快速问题?我正在关注这个问题的公认答案 - 如何显示谁访问了您的个人资料?但是遇到了一个让我有点困惑的错误。我在下面列出了我收到的错误和相关代码:

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

错误 1:未定义的方法 visits' for nil:NilClass Error2: can't write unknown attribute visitor_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

用户.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

访问.rb

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

因为你的@user nil

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

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

用于调试的两个宝石

您应该看到代码中断的位置。更好的错误和绑定或调用者是我发现对快速调试 Rails 应用程序有用的两个宝石。

代码的另一个问题

set_user show,并且你有完全相同的逻辑在你的show方法中查找用户。这不是干的。

相关内容

  • 没有找到相关文章

最新更新