如何显示谁访问了 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 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
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
因为你的@user
是nil
。
您有 before_action :set_user
,但未在 create_user
之前调用。
在您的 create_user
中,您的 @user
未设置,因此为零。
两个用于调试的 gem
您应该看到代码在哪里被破坏。 Better errors and Binding or callers 是我发现对快速调试有用的两个 gem Rails app.
您的代码存在另一个问题
您 set_user
在 show
之前,并且您在 show
方法中使用完全相同的逻辑来查找用户。这不是干的。
有一个关于设置如何使用 rails 在我的应用程序上显示谁访问过用户个人资料的快速问题?我正在按照这个问题的公认答案 - How to show who has visited your profile? 但 运行 进入一个让我有点困惑的错误。我在下面列出了我收到的错误和我的相关代码:
我的用户控制器中出现两个错误
错误 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
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
因为你的@user
是nil
。
您有 before_action :set_user
,但未在 create_user
之前调用。
在您的 create_user
中,您的 @user
未设置,因此为零。
两个用于调试的 gem
您应该看到代码在哪里被破坏。 Better errors and Binding or callers 是我发现对快速调试有用的两个 gem Rails app.
您的代码存在另一个问题
您 set_user
在 show
之前,并且您在 show
方法中使用完全相同的逻辑来查找用户。这不是干的。