How-to: User has fans

前端 未结 1 1652
野的像风
野的像风 2021-01-05 17:53

I need users to be able to become fans of other users. How should I design/set this up?

I need to be able to view details of user fans.

For example. I have u

相关标签:
1条回答
  • 2021-01-05 18:24

    How about a self-referential association:

    class User
      include Mongoid::Document
      references_many :fans, 
                      :class_name => 'User', 
                      :stored_as => :array, 
                      :inverse_of => :fan_of
    
      references_many :fan_of, 
                      :class_name => 'User', 
                      :stored_as => :array, 
                      :inverse_of => :fans
    end
    
    # let's say we have users: al, ed, sports_star, movie_star    
    sports_star.fans << al
    movie_star.fans << al
    sports_star.fans << ed
    movie_star.fans << ed
    
    movie_star.fans  # => al, ed
    al.fan_of        # => sports_star, movie_star
    

    The problem is that you are trying to do relational association using only embedded documents. When you have a Fan embedded inside a User, you can only access the Fan through its parent User. You can't do something like Fan.find(some_id) because there is no collection of Fan records.

    Eventually, MongoDB will support virtual collections that will allow you to do this. For now, you have to use relational-type associations. If you want to use embedded documents in this case, you have to create some ugly and inefficient custom methods to search through parent records.

    With MongoDB and Mongoid, I have found that you can switch between embedded and relational associations easily. SQL-type relationships and embedded relationships both have their place and can be used together to great effect.

    0 讨论(0)
提交回复
热议问题