gpt4 book ai didi

ruby-on-rails - 双向自引用关联

转载 作者:行者123 更新时间:2023-12-04 23:32:38 25 4
gpt4 key购买 nike

以 Ryan Bates 的 asciicast 为例:
http://asciicasts.com/episodes/163-self-referential-association

他以 User 的两个关联结束

  • : friend
  • :inverse_friends

  • 考虑到用户不关心谁挑起友谊,你会想要一个简单的用户关联
  • : friend

  • 这包括两种关系。即由用户发起的关系和由用户的 friend 发起的关系。

    那么如何实现这种双向自引用关联呢?

    更新 - Josh Susser 在这里发表了一篇关于此的帖子:
    http://blog.hasmanythrough.com/2006/4/21/self-referential-through

    然而,它仍然谈论 has_many :sources 和 has_many :sinks,而实际上应该有一个包含源和接收器的 has_many :nodes。

    最佳答案

    看看这对你有用吗?

    class User < ActiveRecord::Base
    has_many :friendships, :foreign_key => "person_id", :class_name => "Friendship"
    has_many :friends, :through => :friendships

    def befriend(user)
    # TODO: put in check that association does not exist
    self.friends << user
    user.friends << self
    end
    end

    class Friendship < ActiveRecord::Base
    belongs_to :person, :foreign_key => "person_id", :class_name => "User"
    belongs_to :friend, :foreign_key => "friend_id", :class_name => "User"
    end

    # Usage
    jack = User.find_by_first_name("Jack")
    jill = User.find_by_first_name("Jill")

    jack.befriend(jill)

    jack.friends.each do |friend|
    puts friend.first_name
    end
    # => Jill

    jill.friends.each do |friend|
    puts friend.first_name
    end
    # => Jack

    这是给定的数据库表模式
    users
    - id
    - first_name
    - etc...

    friendships
    - id
    - person_id
    - friend_id

    关于ruby-on-rails - 双向自引用关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2923692/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com