>有一个关于设置如何使用轨道在我的应用程序上显示谁访问过用户个人资料的快速问题?我正在关注这个问题的公认答案 - 如何显示谁访问了您的个人资料?但是遇到了一个让我有点困惑的错误。我在下面列出了我收到的错误和相关代码:
我的用户控制器中出现两个错误
错误 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
方法中查找用户。这不是干的。