用户有很多:用户,或者我必须使用另一种方式来建立基于朋友的社交网络?

2024-02-17

我正在 Rails 中创建一个小型社交网络,人们可以在其中互相添加为朋友。我创建了一个名为'user',其中包含电子邮件、带有密码盐的强 md5 哈希值等。

如何创建类似将其他用户添加为好友的选项?是否有可能有类似的东西has_many_and_belongs_to :user在用户模型中?所以一个用户有多个用户,并且属于多个用户。或者我应该使用另一种方式,比如添加一个友谊模型user1s_id:integer and user2s_id:integer?


本质上,您需要一个将用户连接到用户的连接模型。但您必须对 Rails 使用更具描述性的术语。

Twitter 不使用 Rails,但以下是使用 Twitter 术语在 Rails 中进行用户关联的方式。注意:Twitter 不需要双向关注(即仅仅因为一个用户关注另一个用户,并不意味着第二个用户关注第一个用户)

class User < ActiveRecord::Base
  has_many :followings
  has_many :followers, :through => :followings, :class_name => "User"
  has_many :followees, :through => :followings, :class_name => "User"
end


class Following < ActiveRecord::Base 
# fields: follower_id followee_id (person being followed)
  belongs_to :follower, :class_name => "User"
  belongs_to :followee, :class_name => "User"
end

强制双向友谊(就像Facebook强制我不能和你成为朋友,除非你是我的朋友)需要更多的工作。您需要使用回调来管理相互条目,或者使用自定义查找器 SQL。使用自定义查找器 SQL 意味着 ActiveRecord 可能无法为您管理关联。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用户有很多:用户,或者我必须使用另一种方式来建立基于朋友的社交网络? 的相关文章

随机推荐

  • 从 FTP 流式传输文件并让用户同时下载

    我正在创建一个备份系统 其中备份将自动生成 因此我将把备份存储在不同的服务器上 但是当我想下载它们时 我希望链接是一次性链接 这并不难但是 为了确保安全 我正在考虑存储这些文件 以便它们无法通过其他服务器上的 http 访问 所以我要做的是
  • iOS 推送通知声音不来

    我正在开发 Ios 推送通知 我可以在其中获取推送通知 但问题是我在收到推送通知时无法听到任何声音 我还检查了我的通知中心 在那里我已经启用了声音 下面给出了我的代码 请指导我如何解决这个问题 UIApplicationMain class
  • COM 的跨平台替代方案

    我一直着迷于基于组件的编程 无论是使用 COM 另一个系统 还是仅使用纯 C 中的范例 如果一个人通常习惯 传统 OOP 模型 那么它需要一些时间来适应 但这绝对是值得的 它使我的代码更易于维护且更易于扩展 我目前正在进行的项目正在使用范例
  • javascript window.open 从回调

    window open 从主线程调用默认打开新选项卡 但是 这里每次都会打开新窗口 Opera 16 和 Google Chrome 29
  • 我需要在 Oracle 上的外键上创建索引吗?

    我有一张桌子A和一张桌子B A有一个外键B on B的主键 B ID 由于某种原因 我知道有合理的原因 当我在键上连接这两个表时 它没有使用索引 是否需要单独创建索引A B ID或者外键的存在应该提供这一点 外键约束本身并不提供 Oracl
  • 为什么 is_copy_constructible 在 MSVC12 中为 unique_ptr 返回 true

    我本来期望这个静态断言会触发 include
  • 具体QPushButton样式

    如何自定义 QPushButton 或 QToolButton 的外观 使其看起来像elementaryos 的网页 按钮 我真正想要的是特征图像位置和侧面的文字 也许如果我幸运的话我也可以得到这样的边框 但我真的不需要标题下面的小描述 我
  • 如何让这个Javascript函数在IE浏览器中工作?

    此 JAVSCRIPT 功能的目的是防止用户输入任何字母字符 如果用户输入这些字符 光标根本不会移动并停留在同一位置 但是 如果用户输入数字 光标将移动到下一个位置 例如 在此文本字段中 我只允许用户输入数字 此方法在除 IE 8 及更早版
  • Bootstrap 3.1.0 导航栏上的全宽输入组

    我在使用 bootstrap v3 1 0 时遇到了一些问题 我需要获得适合导航栏整个宽度的搜索栏 如下所示 v3 0 3 http bootply com 109727 http bootply com 109727但感觉输入组有一些问题
  • C# 字符串创建(指定长度)

    是否有一种简洁的方法 即不是 for 循环 来创建指定长度的字符串 字符串中的内容并不重要 您可以使用the string构造函数需要一个char and an int http msdn microsoft com en us libra
  • php heredocs 语法中的条件语句?

    我想知道您是否可以在此处文档中包含条件语句 这是我的脚本 但它无法正确解析 username php代码 function doSomething username if isset SESSION u name reply a class
  • AppRegistryNotReady:惰性 format_html()?

    为什么我会收到此异常 Traceback most recent call last File path1 myapp isu myapp isu tests unit views test view isu py line 8 in
  • RxJS 节流行为;立即获取第一个值

    笨蛋示例 https plnkr co edit NZwb3ol8CbZFtSc6Q9zm p preview https plnkr co edit NZwb3ol8CbZFtSc6Q9zm p preview 我知道 RxJS 5 0
  • 我们不能在 forEach 中重新分配数组值吗? [复制]

    这个问题在这里已经有答案了 问题陈述是 我应该用 0 替换 5 以下的任何数字 用 1 替换 5 及以上的任何数字 我试图重新分配值 但它不影响 为什么 function fakeBinary n let numbersArr n spli
  • 计算字符串开头的空格数[重复]

    这个问题在这里已经有答案了 如何计算 C 中字符串开头的空格数量 example this is a string 结果是 4 不知道如何正确执行此操作 Thanks Use Enumerable TakeWhile Char IsWhit
  • 在Android中我们如何复制文件并保留其只读属性?

    在我的 Android 应用程序中 我希望能够复制只读文件并使新版本也只读 在目标文件上使用 setReadOnly 方法只会返回 false 表明失败 当然检查文件本身表明它没有设置只读属性 编辑 正如 David Give 所建议的 这
  • 如果存在类似行,如何避免创建新行?

    我需要配置 hibernate 以避免创建重复的行 尽管该行存在 但它会创建一个新行 并且由于仅设置了一个字段 因此将所有其余行设置为 NULL 可以说我有一行如下 id des index age 1 MyName 2 23 虽然我只是将
  • Python 支持零拷贝 I/O 吗?

    我有两个打开的文件对象 dest and src 文件对象dest打开进行写入 查找位置放置在文件内的某个偏移处 并且文件对象src已打开供阅读 我需要做的只是从当前位置读取src到 EOF 并将内容传输到dest尽快 如果我用 Java
  • 在 Java 中使用 Bag 的原因

    我目前正在学习算法和数据结构 当我阅读 算法之书 第四版时 我发现了Bag数据结构与Stack and Queue 阅读了它的解释后 我仍然不清楚为什么我更喜欢使用Bag 其中没有remove 方法 优于其他数据结构 例如Stack Que
  • 用户有很多:用户,或者我必须使用另一种方式来建立基于朋友的社交网络?

    我正在 Rails 中创建一个小型社交网络 人们可以在其中互相添加为朋友 我创建了一个名为 user 其中包含电子邮件 带有密码盐的强 md5 哈希值等 如何创建类似将其他用户添加为好友的选项 是否有可能有类似的东西has many and