【问题标题】:Rails relationship modellingRails 关系建模
【发布时间】:2010-09-14 18:25:27
【问题描述】:

我有一个用户表和一个礼物表。用户可以为他们的朋友挑选礼物。我正在考虑创建一个表来存储用户 ID 和礼物 ID,以跟踪哪个用户为谁挑选了哪个礼物。如何建模这种关系?我认为用户和礼物有 HABTM 关系。对吗?

【问题讨论】:

    标签: ruby-on-rails database-design relationship


    【解决方案1】:

    试试这个:

    class User < ActiveRecord::Base
      has_many :user_gifts
      has_many :gifts, :through => :user_gifts  
    
      has_many :rcvd_user_gifts, :class_name =>"UserGift", :foreign_key => :friend_id
      has_many :rcvd_gifts, :through => :rcvd_user_gifts, :source => :gift
    end
    
    class UserGift < ActiveRecord::Base
      # user_id
      # friend_id
      # gift_id
    
      belongs_to :user
      belongs_to :friend, :class_name => "User"
      belongs_to :gift
    
    end
    
    class Gift < ActiveRecord::Base
      has_many :user_gifts
      has_many :senders, :through => :user_gifts, :source => :user
      has_many :receivers, :through => :user_gifts, :source => :friend
    end
    

    现在可以进行以下调用:

    user.gifts      # Gifts given by a user:
    user.rcvd_gifts # Gifts received by a user:
    gift.senders    # Users sending a gift
    gift.receivers  # Users receiving a gift
    

    确保索引user_gifts 表中的user_idfriend_idgift_id 列。

    【讨论】:

      【解决方案2】:

      嗯,首先这是一个三向关系,因为你有用户 -> 朋友,还有用户 -> 礼物。

      我会使用 has_many :through 并将朋友的 ID 存储在那里。查询起来会有点尴尬,但应该可以。

      【讨论】:

        猜你喜欢
        • 2018-10-27
        • 1970-01-01
        • 2019-03-02
        • 1970-01-01
        • 1970-01-01
        • 2018-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多