ruby-on-rails – Rails:带有has_and_belongs_to_many的自联接方案?

ruby-on-rails – Rails:带有has_and_belongs_to_many的自联接方案?,第1张

概述我想创建一个拥有很多朋友的用户结构,也是类User: class User < ActiveRecord::Base has_and_belongs_to_many :friends, class_name: "User"end 我不需要他们关系的任何细节因此我不使用:通过类友谊.但是现在我找不到任何方法来创建相应的数据库(既不使用迁移文件也不使用rails g model User use 我想创建一个拥有很多朋友的用户结构,也是类User:

class User < ActiveRecord::Base  has_and_belongs_to_many :frIEnds,class_name: "User"end

我不需要他们关系的任何细节因此我不使用:通过类友谊.但是现在我找不到任何方法来创建相应的数据库(既不使用迁移文件也不使用rails g model User username:string …命令).有任何想法吗?

解决方法 以下是一些可能有用的资源:

> RailsCasts episode #163 Self-Referential Association关于自我引用的多对多关系
> RailsCasts episode #47 Two Many-to-Many.这可能与您试图完成的事情更相关
> @L_403_2@

我将总结这些链接中的信息:

鉴于您正在描述自引用的多对多关系,您当然最终会得到一个连接表.通常情况下,连接表应该以Rails自动确定表格加入的模型的方式有意识地命名,但是“自引用”部分使这有点尴尬,但并不困难.您只需指定连接表的名称以及连接列.

您需要使用可能如下所示的迁移创建此表:

class CreateFrIEndships < ActiveRecord::Migration  def self.up    create_table :frIEndships,ID: false do |t|      t.integer :user_ID      t.integer :frIEnd_user_ID    end    add_index(:frIEndships,[:user_ID,:frIEnd_user_ID],:unique => true)    add_index(:frIEndships,[:frIEnd_user_ID,:user_ID],:unique => true)  end  def self.down      remove_index(:frIEndships,:user_ID])      remove_index(:frIEndships,:frIEnd_user_ID])      drop_table :frIEndships  endend

我不确定是否有创建此表的快捷方式,但最低限度你可以简单地做rails g migration create_frIEndships,并填写self.up和self.down方法.

最后在您的用户模型中,您只需添加连接表的名称,如下所示:

class User < ActiveRecord::Base  has_and_belongs_to_many :frIEnds,class_name: "User",join_table: :frIEndships,foreign_key: :user_ID,association_foreign_key: :frIEnd_user_IDend

如您所见,虽然数据库中有连接表,但没有相关的连接模型.

请告诉我这是否适合您.

总结

以上是内存溢出为你收集整理的ruby-on-rails – Rails:带有has_and_belongs_to_many的自联接方案?全部内容,希望文章能够帮你解决ruby-on-rails – Rails:带有has_and_belongs_to_many的自联接方案?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1212517.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存