0

Получил быстрый вопрос о том, как показать, кто посетил профиль пользователя в моем приложении, используя рельсы? Я следил за принятым ответом на этот вопрос - How to show who has visited your profile?, но столкнулся с ошибкой, которая меня немного смутила. Я перечислил ошибки, которые я получаю, и мой соответствующий код ниже:Как показать, кто посетил профиль пользователя в Rails?

Две ошибки, возникающую в моем контроллере пользователей

Error1: не определен метод 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 
+0

вы должны, вероятно, использовать 'before_action: create_visit, только: [: show]' иначе число будет слишком высоким. –

ответ

2

Потому что ваш @user является nil.

У вас есть before_action :set_user, но он не вызывается до create_user.

В вашем create_user, ваш @user не установлен, поэтому его нет.

Два драгоценных камней для отладки

Вы должны быть показаны, где код разрывается. Better errors и Binding or callers - это два драгоценных камня, которые я нашел полезными для быстрого приложения Rails для отладки.

Еще одна проблема с вашим кодом

Вы set_user brefore show, и у вас есть точно такой же логики искать пользователя в вашем методе show. Это не СУХОЙ.

+0

Эдмонд благодарит вас за ваш ответ, я немного следил за тобой, как бы я решил его решить. Мне нужно изменить user.rb? – Omar

+0

@Omar вам нужно 'set_user' перед созданием' create_visit'. просто добавьте 'create_visit' в свой массив' only: 'в' before_action: set_user'. –

+0

Edmund получил его, чтобы он больше не выдавал мне ошибку, поскольку я сделал следующее, как вы предлагаете: '' before_action: set_user, only: [: show,: edit,: update,: destroy,: share,: follow ,: create_visit] ''. Теперь на моих взглядах подсчитать количество посетителей. Должен ли я делать следующее в контроллере: '@ @ visitprofiles = current_user.visitors.where ('created_at>?', 1.month.ago)' 'и в моих представлениях просто' '<% = @ visitprofiles.count%> ''? – Omar