多态 has_and_belongs_to_many

2023-12-30

如何定义 has_and_belongs_to_many 多态关联?

情况:

想象一下我们有用户、曲目、列表等......并且所有这些模型都可以被标记并使用此标签进行过滤。

我想做的是:

Use has_and_belongs_to_many这使得标签可以拥有其他对象,并且其他对象也可以拥有其他标签。

因此,为了启用属于多种对象(用户或曲目或曲目列表)的标签,我们需要使用多态关系。

这是我此刻的代码:

标签迁移

class CreateTags < ActiveRecord::Migration[5.2]
  def change
    create_table :tags do |t|
      t.string :name
      t.references :taggable, polymorphic: true, index: true
      t.timestamps
    end
    create_table :assemblies_parts, id: false do |t|
      t.belongs_to :assembly, index: true
      t.belongs_to :part, index: true
    end
  end
end

标签模型

class Tag < ApplicationRecord
  has_and_belongs_to_many :taggable, polymorphic: true
end

用户模型

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  has_and_belongs_to_many :tags, as: :taggable
  has_one :top_list
  has_many :tracks, through: :top_list

end

轨道模型

class Track < ApplicationRecord
  has_and_belongs_to_many :tags, as: :taggable
  belongs_to :top_list
end

您可以使用has_many协会:

标签型号

class Tag < ApplicationRecord
  has_many :relation
end

关系模型

class Relation < ApplicationRecord
  belongs_to :tag
  belongs_to :taggable, polymorphic: true
end

用户模型

class User < ApplicationRecord
  has_many :relations, as: :taggable
  has_many :tags, through: :relations

  has_one :top_list
  has_many :tracks, through: :top_list
end

轨道模型

class Track < ApplicationRecord
  has_many :relations, as: :taggable
  has_many :tags, through: :relations

  belongs_to :top_list
end

标签 迁移

class CreateTags < ActiveRecord::Migration[5.2]
  def change
    create_table :tags do |t|
      t.string :name
      t.timestamps
    end
    create_table :relations, id: false do |t|
      t.references :tags, index: true
      t.references :taggable, polymorphic: true, index: true
    end
  end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多态 has_and_belongs_to_many 的相关文章

  • Rails 资产管道:CSS 无效

    我正在尝试使用http designshack net articles css build an animated photo wall with css http designshack net articles css build a
  • Rails f.check_box 设置选中/未选中值

    所以我在 Rails 中得到了一个带有复选框的表单助手 我希望该复选框在选中或取消选中时具有 thatvalue 或 thisvalue 值 我还没有找到如何设置它的地方 f check box field 我发现了类似的东西 但它不起作用
  • Rails 中的并行方法

    我的 Rails Web 应用程序有数十种方法 从调用 API 到处理查询结果 这些方法具有以下结构 def method one batch query API process data end def method nth batch
  • Ruby on Rails 最酷的功能是什么,为什么选择它? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在我问这个问题之前 我浏览了 SO 上 Ruby on Rails 的搜索结果 找不到太多 但以下 在此页面上找到 https stackove
  • ruby on Rails,会话过期通知

    我正在使用 ruby 1 9 3 和 Rails 3 2 我的实际会话处理如下所示 会话助手 def sign in user cookies remember token value user remember token expires
  • 从部分重定向回具有部分的同一页面后保留验证错误

    因此 我试图从我的表单中获取错误 该表单在我的 root path 中呈现为部分内容 在我尝试发布它但失败 或成功 后 我想重定向回 root path 但是 redirect to 决定不保存任何验证信息 想知道如何做到这一点 class
  • Memcachier 达到缓存限制时 Heroku 请求超时

    我使用 Memcachier Dalli 作为客户端 将 Rails 应用程序部署到 Heroku 我正在使用免费插件 提供 25 MB 缓存 我们开始收到来自heroku的请求超时 经过调试 我们发现手动刷新Memcachier解决了问题
  • Rails Searchkick / Elasticsearch has_many 和belongs_to 关联

    我尝试使用 Searchkick 运行搜索并基于多个模型返回 我的书本模型包含这个 class Book lt ActiveRecord Base searchkick has many book subjects has many sub
  • 使用 Minitest 测试自定义验证器

    我有多个带有电子邮件验证的模型 因此 我将验证提取到自定义验证器中 我按照以下教程做到了这一点导轨指南 http guides rubyonrails org active record validations html custom va
  • save_and_open_page 已停止提供我的 CSS

    我的测试设置工作得很好 每当我打电话时 都能提供正确格式的 css 页面save and open page从测试中 然后 我设置了一些 javascript 测试 并对我的设置进行了一些更改 抱歉 我无法详细说明所有内容 我没有足够详细地
  • 自定义通用 Rails 错误消息

    我们的 Rails 应用程序被设计为链接到多个客户端数据库的单个代码库 根据子域 应用程序确定要连接到哪个数据库 我们使用液体模板为每个客户定制演示文稿 我们无法为每个客户定制通用的 我们很抱歉 出了点问题 消息 谁能推荐一种方法让我们能够
  • Rails 3.1 和图像资源

    我已将管理主题的所有图像放入名为 admin 的文件夹内的资产文件夹中 然后我像平常一样链接到它 Ruby image tag admin file jpg CSS logo background url assets images adm
  • 为什么 Rails 中的区域设置充当全局(使用 Thin 时)?

    我刚刚意识到在控制器中设置区域设置的推荐 Rails 方法 before filter set locale def set locale I18n locale params locale I18n default locale end
  • 为什么||和 或 在 Rails 中的行为有所不同? [复制]

    这个问题在这里已经有答案了 可能的重复 i true 和 false 在 Ruby 中是真的吗 https stackoverflow com questions 2802494 i true and false in ruby is tr
  • 多次部署后 Heroku Slug 大小

    我有一个红宝石 on Rails非常接近 slug 大小限制 300mb 的应用程序 我已经尽可能地减小了尺寸 slugignore但还没有得到我想要的结果 一时兴起 我尝试创建一个新的Heroku应用程序并向其部署相同的 git 存储库
  • 带回形针、导轨的水印图像 4

    我一直在尝试按照中列出的答案向我的图像添加水印带有回形针的水印 https stackoverflow com questions 13517757 watermark with paperclip 水印 rb module Papercl
  • Rails 4 和 Turbolinks - 元标签未更改

    我有一个启用了 Turbo Links 的 Rails 4 应用程序 但在更改页面时无法刷新元标记 不是完全刷新 我读到元标记需要包含在加载涡轮链接的 JavaScript 之前 但它没有效果 完全刷新可以完成这项工作 但不幸的是这不是我所
  • 如何使用 Ruby on Rails 3 检查 HTTP 请求的“Content-Length”字段?

    我正在使用 Ruby on Rails 3 在我的视图文件中我有以下代码 为了避免服务器过载 我会在服务器接收上传文件之前检查上传文件的大小 这是因为 按下表单的提交按钮 服务器会先完整接收文件 然后再检查文件 我知道一个HTTP 请求有标
  • 使用redirect_to :create 动作

    我正在尝试重定向到另一个控制器的创建方法 但是 我找不到将方法设置为 POST 的方法 这将导致调用索引方法 使用 method gt post只是创建一个新参数 但不会更改 http 方法 有什么想法如何重定向到创建方法吗 您无法在重定向
  • 在 mac os Sierra 上,卡在“设置 CocoaPods 主存储库”上

    转移到 mac os sierra 后 我完全格式化了我的 mac 现在每次运行时我都面临安装 cocoapods 的问题sudo gem install cocoapods pre一切都安装得很好 当我尝试安装 Pod 时 终端堆栈打开S

随机推荐

  • 在64位Debian环境下编译32位qt源

    我想在 Debian 64 位环境上构建 32 位应用程序 因此 我正在尝试编译 Qt 源代码以获得 32 位库 我正在尝试使用以下配置命令 configure platform linux g 32 不幸的是 我收到如下错误 Basic
  • AngularJS 中的错误请求错误

    var successCallback function response if response success log log response data alert fetched courses and percentages su
  • 以编程方式清除 Chrome 浏览器历史记录

    我尝试过使用以下代码 但它不适用于 chrome 仅适用于旧浏览器 Browser clearHistory getContentResolver 这段代码对我有用 private void clearHistoryChrome Conte
  • 如何检测浏览器窗口是否滚动到底部?

    我需要检测用户是否滚动到页面底部 如果它们位于页面底部 当我向底部添加新内容时 我会自动将它们滚动到新底部 如果它们不在底部 则它们正在阅读页面上较高位置的先前内容 因此我不想自动滚动它们 因为它们想留在原处 如何检测用户是否滚动到页面底部
  • 启用 Sleuth 会减慢请求速度(很多)

    我将 Spring Cloud Feign 和 Sleuth 与 Zipkin 服务器结合使用 我的问题是 当我启用 Sleuth 时 任何简单的请求至少需要 600 毫秒 请注意 出于测试目的 我将 Sleuth 的采样器百分比设置为 1
  • http 代理背后的 PHP Composer

    我在网络上使用 Composer 其中访问互联网的唯一方法是使用 HTTP 或袜子代理 我有 http proxy 和 https proxy 环境变量 当 compose 尝试访问 HTTPS URL 时 我得到以下信息 file cou
  • Maven、Scala、Spring、AspectJ

    有谁知道是否可以在编译时使用aspectJ和spring编织scala类 我的编译时编织适用于我的所有 java 类 但我似乎无法让它适用于使用 Configurable 的 scala 类 作为背景 我已经为此工作了几天 多么痛苦啊 无论
  • shell 脚本中的“if [ -t 1 ]”有什么作用?

    我有将 zsh 设置为默认 shell 的代码 if t 1 then exec zsh fi 该命令具体执行什么操作if t 1 在这里做吗 我有将 zsh 设置为默认 shell 的代码 不 你没有 这不是你的代码所做的 尽管它产生了类
  • 通过 WebDAV 脚本为 NextCloud 文件添加标签

    我使用 NextCloud 11 来存储我的个人文件 并使用文档中的简单curl 脚本将文件上传到我的 NextCloud 驱动器 curl u user pw T test pdf http localhost nextcloud rem
  • 将 pdf 转换为 txt 文件的函数的输出重定向到 python 中的新文件夹

    我正在使用 python 3 我的代码使用 pdfminer 将 pdf 转换为文本 我想在新文件夹中获取这些文件的输出 目前它位于现有文件夹中 使用 pdfminer 从该文件夹转换为 txt 如何将输出重定向到不同的文件夹 我希望输出位
  • PHP $_Server 无法正常工作[重复]

    这个问题在这里已经有答案了 我有以下几行 div class social http SERVER HTTP HOST SERVER REQUEST URI div 一切都很棒 它显示了当前的链接 比方说 http www example
  • 重置 Android 文本视图最大行数

    我想制作一个可以通过用户触摸折叠的 TextView 当 TextView 折叠时 我设置textView setMaxLines 4 如何在扩展方法中清除此状态 我只能想到打电话setMaxLines 值很大 例如10000 有更好的方法
  • 并行运行多个 future,超时返回默认值

    我必须并行运行多个 future 并且程序不应崩溃或挂起 现在 我一一等待 future 如果出现 TimeoutException 则使用后备值 val future1 start future1 val future2 start fu
  • 如果提交是由标签引用而不是由分支引用,那么它是否会被垃圾收集?

    我有一个引用提交的带注释的标签 如果带注释有关系吗 并且没有分支引用那里 一段时间后提交会被垃圾收集吗 不 提交不会被垃圾收集 来自标签的引用足以使提交保持活动状态
  • eslint 使用配置了 jsconfig.json 的路径映射解决导入错误

    这是我的项目结构 src assets components constants helpers pages routes eslintrc json jsconfig json App js index js 我厌倦了 import So
  • BlockingCollection 与 Parallel.For 挂起?

    我正在玩BlockingCollection尝试更好地理解它们 但我很难理解为什么当我使用Parallel For 我只是添加一个数字 生产者 var blockingCollection new BlockingCollection
  • Request.IsLocal 替代方案?

    据我所理解 请求 IsLocal http msdn microsoft com en us library system web httprequest islocal aspx在两种情况下返回 true 如果请求发起者的IP地址是127
  • SwiftUI 自定义 PickerStyle

    我正在尝试写一个自定义PickerStyle看起来类似于SegmentedPickerStyle 这是我目前的状态 import SwiftUI public struct FilterPickerStyle PickerStyle pub
  • 使用 SocketChannel Android 连接到 websocket

    我编写了连接到 websocket 服务器 服务器应用程序和 android 应用程序的 android 应用程序Autobahn网络套接字库 我可以成功连接服务器并与服务器交换消息 但一段时间后 20 30 分钟后 Android 应用程
  • 多态 has_and_belongs_to_many

    如何定义 has and belongs to many 多态关联 情况 想象一下我们有用户 曲目 列表等 并且所有这些模型都可以被标记并使用此标签进行过滤 我想做的是 Use has and belongs to many这使得标签可以拥