如何在Rails中管理3个多对多模型

2023-12-20

我正在跟进铁路广播公司 http://railscasts.com/episodes/47-two-many-to-many制作不同模型进行维护的建议many-to-many关系。但是,我在提取传递关系数据时遇到问题。

假设有 3 个多对多模型:User <-> Color <-> Shades

我又做了两个模型:

ColorLiking (maintains User <-> Color), DiffShades (maintains Color <-> Shades)

Question现在,如果一切设置正确......我如何找到Shades属于一个User?

我将如何建立这种关系?

class User < ActiveRecord::Base
   has_many :shades, :through=>:diffShades, :source => :color
end

上面好像不行...

使用 SQL,下面的查询可以工作:

select * from shades 
  where id in (select shade_id from diffshades 
                where color_id in (select color_id from colorlikings 
                                     where user_id = ?))

这是空中代码,可能至少有部分错误,但可能有助于您进行富有成效的调查。

长话短说,ActiveRecord 不会让您仅通过各种 :has 和 :belongs 调用就一直到达 User.shades 方法。但编写自己的模型方法来做到这一点并不算太可怕。

class User < ActiveRecord::Base
   has_many :color_likings
   has_many :colors, :through => :color_likings

   def get_shades
     colors.collect {|c| c.shades.to_a}.flatten
   end
end

class ColorLiking < ActiveRecord::Base
  belongs_to :user
  belongs_to :color
end

class Color
  has_many :color_likings
  has_many :users, :through => :color_likings  
end

class DiffShade
  belongs_to :color
  belongs_to :shade
end

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

如何在Rails中管理3个多对多模型 的相关文章

  • ActiveRecord 嵌套 SELECT——我可以在没有手动 SQL 的情况下完成它吗?

    我有一张桌子 上面有 除其他外 一个名字和一个等级 我想返回所有唯一名称的集合 但对于返回的每个名称 我想选择排名最高的行 这很简单 有两个嵌套的 SELECT 语句 SELECT FROM SELECT FROM foo ORDER BY
  • pow 说: Bundler::GemNotFound:无法在任何源中找到 rake-0.9.2.2

    我有一个运行良好的 Rails 应用程序rails s 但是当我尝试使用 pow 加载它时 我收到此错误 Bundler GemNotFound Could not find rake 0 9 2 2 in any of the sourc
  • CanCan load_and_authorize_resource 触发禁止属性

    我有一个使用强参数的标准 RESTful 控制器 class UsersController lt ApplicationController respond to html js def index users User all end
  • 将 URL 转换为 JSON 版本?

    在我的应用程序的所有页面上 我想要一个指向当前页面的 JSON 版本的链接 有什么巧妙的技巧可以做到这一点吗 当 URL 中包含额外的 参数时 情况就变得复杂了 所以 url 将被转置为 users gt users json users
  • 带完整堆栈跟踪的单元测试

    这似乎是一个愚蠢的问题 但我无法在任何地方找到答案 我正在使用 Rails 3 1 和 Test Unit 当测试失败时 我只能看到堆栈的顶部 例如 ERROR creating a message sends emails 1 35s N
  • 我可以在 render.js 上执行的视图中使用 CoffeeScript 吗?

    我需要做什么才能在 Rails JS 视图中使用 CoffeeScript 例如 def index format js render layout gt false end 我需要做什么才能让 Rails 使用index js coffe
  • 如何使用多个 { 'not find' } 来干燥方法?

    我正在尝试优雅地处理以下错误的 JSON 其中Hash fetch似乎不是一个选择 使用 Hash fetch 优雅地处理错误的 JSON https stackoverflow com questions 25193627 handle
  • Rails:如何重新启动 sidekiq?

    我正在使用 sidekiq gem 在后台运行 API 调用 我在守护进程中运行 sidekiq 如下所示 bundle exec sidekiq d 现在我对我的方法做了一些更改 所以我想重新启动 sidekiq 我尝试使用以下命令杀死
  • Capistrano 部署后 EC2 服务器中缺少 puma.sock

    通过 capistrano 将 ruby on Rails 项目的生产部署到 ec2 上的实例后 我在 nginx 错误日志中收到以下错误 亚马逊公共主机显示 502 Bad Gateway nginx 1 10 0 Ubuntu 我按照教
  • 将 ERB 与 Handlebars 模板结合使用

    我有一个使用 ajax 创建新标签的模式 它使用 Tags 参数执行 POST 方法 而无需重新充电视图 因此 我希望根据所选的 price type 参数来呈现一个或另一个价格 div 我使用 Handlebars 所以我想这不是 rub
  • Rube.exe:Babun 中没有这样的文件或目录

    我正在尝试在 Babun 中安装 ruby gems 以便我可以安装 sass 和 compass 但不断收到错误 C RailsInstaller Ruby2 1 0 bin ruby exe No such file or direct
  • 如何在 Rails 模型中获取 request.uri?

    request request 当我在控制器中写这个时 它就会起作用 但是如果我在模型或应用程序控制器中需要这个变量 我该怎么办 模型存在于 Web 请求的上下文之外 您可以在 irb 中实例化它们 可以在延迟作业或脚本等中实例化它们 如果
  • 使用 Ruby on Rails 的多个应用程序

    单个 Ruby on Rails 安装是否可以拥有多个共享通用模型的应用程序 例如 我想要一个前端应用程序以及后端管理控制台 但两者共享相同的模型 这类似于 Symfony 在 PHP 中的工作方式 提前致谢 拥有管理面板的最简单方法是使用
  • 如何在 Rails ActiveRecord 中的日期指定小于今天的条件

    我正在尝试找出如何提取我的集合中的所有记录的字段publish是真的并且expires比今天少 我有以下内容 但我认为小于部分不起作用 有人可以指出我正确的轨道吗 Announcement where publish true expire
  • 表单提交按钮仅在重新加载后才有效

    我有一个构建表的索引页 我试图允许用户编辑表中的行 我试图以最基本的方式做到这一点 没有 javascript ajax 等 除非 Rails 提供了它 我的表在索引方法中显示良好 并且有一个表单作为表中的最后一行 可用于添加新行 新的形式
  • 如何停止 Heroku 服务器?

    我有一个托管在 heroku 上的临时服务器 我只想将其关闭 但不想破坏该应用程序 我该怎么做 我是否有类似 heroku stop 之类的命令 例如 heroku restart 来重新启动 OR 有没有办法让服务器在超过 750 小时免
  • Rails:仅当满足某些条件时如何运行 before_save?

    我有一个 before save 方法 我称之为重命名上传的图像 before save randomize file name def randomize file name extension File extname screen f
  • Rspec:测试救援

    尝试测试我的函数是否能够正确地从异常中解救 更改参数 文件名 然后重试一次 我可以让函数接收第一次尝试 但无法让它接收第二次尝试 控制器 begin video get video video id rescue matches video
  • Rails 中带有 text_field 的逗号分隔数组

    我有一些users可以有很多posts 并且每个帖子都可以有很多tags 我已经使用一个实现了拥有并属于许多帖子和标签之间的关系 创建新帖子时 用户可以使用逗号分隔的值列表对其进行标记 就像在 SO 上发布新问题时一样 如果任何标签尚不存在
  • Rails:统计用户未读通知的数量

    我目前有一个处理用户活动通知系统的活动模型 当发生某些操作 例如创建新文章 时 活动观察者会创建一个新活动 现在我想记录当前用户尚未看到的这些活动通知中有多少 类似于 facebook 上的通知宝石 每次用户单击通知链接时 数字应重置为 0

随机推荐

  • 根据 ng-click 索引更改图像 src AngularJS

    我有这个 angularJS 代码 指令模板定义 li img src img ImgTest li 另外 我的指令代码有 link function scope elem attrs scope ImgTest Img 1 单击 ng 后
  • Python如何扩展“str”并重载其构造函数? [复制]

    这个问题在这里已经有答案了 我有一个字符序列 如果你愿意的话 可以是一个字符串 但我想存储有关字符串来源的元数据 另外我想提供一个简化的构造函数 我尝试过延长str谷歌会为我解决尽可能多的课程 到了这个地步 我就放弃了 class WcSt
  • 如何在 Kotlin 中创建线程池

    我想在 Kotlin 中创建一个线程池 我在互联网上搜索了几个小时 但找不到一个例子 谁能提供例子 谢谢 val executor Executors newFixedThreadPool 5 for i in 0 9 val worker
  • 如何将 lombok 和 JPAMetalModel 处理器与 Maven 共存

    如何使用Lombok https projectlombok org 当 JPAMetaModelEntityProcessor 注释处理器在 Maven 构建中激活时 Maven 配置
  • nasm - 无法在 macOS Mojave 上将目标文件与 ld 链接

    我正在尝试组装一个简单的 Hello World 它在以前的 macOS 版本中运行良好 global start section text start mov rax 0x02000004 mov rdi 1 mov rsi msg mo
  • 如何在 Bootstrap Vue 的卡组组中制作滑块?

    我使用本教程制作卡片组 https bootstrap vue js org docs components card card deck groups https bootstrap vue js org docs components
  • 基于子图像高度的 DIV 高度在底部添加了一些额外的像素

    为什么图像的父 div 底部有一些额外的像素 如何在不硬编码父 div 高度的情况下删除像素 http jsfiddle net 6x8Dm http jsfiddle net 6x8Dm HTML div class wrapper di
  • 调度多个 .NET Core 控制台应用程序

    我能够安排测试 NET Core 控制台应用程序 将程序 脚本设置为 dotnet 将参数设置为 mytestnetcoreconsoleapp dll 并将启动目录设置为包含 dll 的目录 不过 对于多个控制台应用程序来说 这样做是否正
  • 我们可以在没有 JavaScript 的情况下制作“打印”按钮吗?

    我们可以在没有 JavaScript 的情况下制作 打印 按钮吗 打开浏览器打印窗口 HTML 没有针对锚标记或输入按钮 或其他任何内容 的内置 打印 操作 因此 JavaScript 是您的方式 您还可以为用户提供有关如何使用 文件 gt
  • 从 git 存储库获取版本号

    我们有一个构建系统 它使用 svn ID 作为需要五位数字的 VM 构建器设备的输入 当我从 git 构建时 我一直通过计算 git 存储库中的提交数量来伪造这一点 这只是一种工作 我正在努力弄清楚 如何从 git 存储库中获取唯一的 5
  • 验证 Windows Phone 应用内购买收据

    我正在开发 Windows Phone 8 应用程序 我的应用程序将包含应用内购买 我试图理解收据的概念 据我了解 当有人在我的应用程序内购买产品后 会生成收据
  • 使用 C# 从网站下载文件

    我正在尝试使用以下代码从网站下载文件 WebClient webClient new WebClient webClient DownloadFile http www nseindia com content historical EQU
  • -bash: ./deploy.sh: 权限被拒绝,错误:脚本返回退出代码 126

    我正在尝试使用 Jenkins 实现持续部署 这涉及到将 jar 文件发送到远程服务器 并在远程服务器上启动该 jar 文件 问题是我不断收到访问被拒绝错误 并且我已经尝试了远程和本地服务器上的每个帐户似乎都不起作用 我犯了同样的错误 詹金
  • 为什么选择选择更改多个提交?

    我这里有 2 个分支 即分支 1 和分支 2 分支1增加了很多新功能 分支2也很稳定 今天 我只想将分支 1 中的 1 个功能合并到分支 2 中 所以 我只是跑git cherry pick
  • Drupal 7 - 如何从模块加载模板文件?

    我正在尝试在 Drupal 7 中构建自己的模块 所以我创建了一个名为 moon 的简单模块 function moon menu items array items moon array title gt description gt t
  • LINQ to Entities 在 DateTime.DayOfWeek 上加入

    想象两个表 班次 RANK S DAY Shifts 包含一个 ShiftDate 列 它是DateTime并且 RANK S DAY 有一个DayOfWeek柱子 我需要加入 int ShiftDate DayOfWeek equals
  • toUpperCase() 没有使字符串大写

    我不知道我做错了什么 但不知何故 toUpperCase 字符串函数在我的浏览器上不起作用 或者我弄错了什么 var string kjsdgfiIJHBVSFIU string toUpperCase console log string
  • Android - mediarecorder 的最大 maxfilesize 是多少?

    Android 对于 Android 媒体记录器 setMaxFileSize 可以设置的最大文件大小是多少 我知道它在 4147483650 和 5147483650 之间 为什么首先要有限制 我正在录制到 SDCARD 在运行之前检测卡
  • 使用 spring 在 Ibm Websphere MQ 中实现重试逻辑

    我正在使用 Spring 和 Websphere MQ 进行以下消息传递配置 我需要实现一个场景的重试逻辑 其中我从队列接收消息并将消息数据放到弹性搜索服务器 搜索服务器是非事务性的 如果搜索服务器关闭 我必须回滚消息再次放入队列并在一段时
  • 如何在Rails中管理3个多对多模型

    我正在跟进铁路广播公司 http railscasts com episodes 47 two many to many制作不同模型进行维护的建议many to many关系 但是 我在提取传递关系数据时遇到问题 假设有 3 个多对多模型