如何显示谁访问了您的个人资料?

Son*_*ack 1 ruby ruby-on-rails ruby-on-rails-4

所以,我有一个带有用户个人资料的用户的应用程序,我有一个访问者标签,我想向访问他们个人资料的用户显示.

我怎么能做到这一点?我现在有一个用户模型,我猜我可能需要使用HMT吗?即用户通过user_visitors或其他东西拥有很多访问者.你能否清楚如何做到这一点?

小智 6

您可以创建一个名为的连接模型 Visit

    class Visit < ActiveRecord::Base
      belongs_to :user
      belongs_to :visitor, class_name: 'User', foreign_key: 'visitor_id'
    end
Run Code Online (Sandbox Code Playgroud)

和用户模型:

    class User < ActiveRecord::Base
      has_many :visits
      has_many :visitors, through: :visits
    end
Run Code Online (Sandbox Code Playgroud)

要创建访问,请将您的控制器users_controller置于before_action:

    def create_visit
      @user.visits.create(visitor: current_user)
    end
Run Code Online (Sandbox Code Playgroud)

或者,如果您不想重复访问:

   def create_visit
     @user.visits.where(visitor: current_user).first_or_create
   end
Run Code Online (Sandbox Code Playgroud)

和vualá!

现在您可以使用以下内容:

    current_user.visitors
Run Code Online (Sandbox Code Playgroud)

或者有一些条件:

    current_user.visitors.where('created_at > ?', 1.month.ago)
Run Code Online (Sandbox Code Playgroud)

你也可以在你的关系上加上条件:

    class User < ActiveRecord::Base
      ...
      has_many :recent_visitors, through: :visits, source: :visitor, conditions: [ "created_at > ?", 1.month.ago ]
      ...
    end
Run Code Online (Sandbox Code Playgroud)

希望它有所帮助!