Rails ActiveRecord 协会

2024-04-13

好的,这是我的问题。我有 3 个不同的模型:人员、角色、客户和商店。客户有很多商店,也可以有很多人。商店里人很多。人们有各种各样的角色。 1 人可以在多个商店工作,并且他们在每个商店可能具有不同的角色。

例如。乔可能是一家商店的助理经理和另一家商店的经理。我希望能够做的是通过做类似的事情来扮演正确的角色


Store.find(1).people.find(1).roles  
(would return 'assistant manager' for example) or

Store.find(2).people.find(1).roles  
(would return 'manager' for example). Is this possible to do in ActiveRecord?

我创建了一个表 :roles_people ,其定义如下:



create_table :roles_people, :id => false do |t|
      t.references :role
      t.references :person
      t.references :store
      t.references :client
end
  

但是我无法弄清楚如何使用此表使关联正常工作。有人能指出我正确的方向吗?

Thanks


class People
  belongs_to :client
  has_many :store_roles
end

class Roles
  has_many :store_roles
end

class StoreRole
  belongs_to :role
  belongs_to :people
  belongs_to :store
end

class Client
  has_many :stores
  has_many :people
end

class Store
  belongs_to :client
  has_many :store_roles
  has_many :roles, :through => :store_roles
end

假设所有这些类都继承自ActiveRecord::Base ;)

您将需要设置迁移和数据库结构来反映这些关系。对于每个belongs_to有一个:object_id表上的字段引用相应表的 ID。

您的查询需要类似于:

Store.find(1).roles.find(:all, :conditions => ["store_roles.person_id = ?", 1])

我可能会向商店模型添加一个方法,以使这变得更容易:

def roles_for(person_id)
  roles.find(:all, :conditions => ["store_roles.person_id = ?", person_id])
end

这样您就可以使用以下方式找到角色:

Store.find(1).roles_for(1)

或者,更好的是:

def self.roles_for(store_id, person_id)
  Role.find(:all, :joins => :store_roles, :conditions => ["store_roles.store_id = ? AND store_roles.person_id = ?", store_id, person_id])
end

这将我们的查找器更改为:

Store.roles_for(1, 1)

我想说最后一种方法是最理想的,因为它仅导致单个查询,而其他每个选项在每个角色查找中对数据库执行两个查询(一个用于查找存储,一个用于获取角色) person_id)。当然,如果您已经实例化了 Store 对象,那么这没什么大不了的。

希望这个答案足够了:)

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

Rails ActiveRecord 协会 的相关文章

  • Ruby/Rails 集合到集合

    我有两个表与一个连接表连接 这只是伪代码 Library Book LibraryBooks 我需要做的是 如果我有一个图书馆的 id 我想获取该图书馆拥有的所有书籍所在的所有图书馆 因此 如果我有图书馆 1 图书馆 1 中有书籍 A 和
  • 资产管道:仅对一个控制器使用 javascript 文件

    在 Ruby on Rails v4 中 我希望仅为特定控制器加载一个 js 文件 或一组 js 文件 执行此操作的标准方法是什么 在 application js 中有 require tree 线 我假设这需要删除 所以我并不总是加载每
  • RoR - Rails 中的大文件上传

    我有一个 Rails Web 应用程序 允许用户上传视频 视频存储在 NFS 安装的目录中 当前的设置适用于较小的文件 但我也需要支持大文件上传 最多 4GB 当我尝试上传 4GB 文件时 它最终会发生 但从用户体验的角度来看很糟糕 上传开
  • Ruby 中的 DateTime.parse() 是否依赖于语言环境?

    我想知道以下示例的输出 解析时01 03 它会被解决为Mar 1st or Jan 3rd Ruby 不依赖于语言环境 因为红宝石是一个服务器端语言而不是客户端像 JavaScript 一样的语言 Ruby 使用系统时钟yourWeb 应用
  • 如何将 'IN (1,2,3)' 与 findAll 一起使用?

    我需要从数据库中获取几个学生 并且我将他们的主键放在以逗号分隔的字符串中 通常使用 SQL 会是这样的 cleanedStudentIdStringList 1 2 3 4 SELECT FROM Student WHERE id IN c
  • Rails 资源单数还是复数?

    我有一条搜索路线 我想将其设为单数 但是当我指定单数路线时 它仍然会生成复数控制器路线 这是应该的样子吗 resource search Gives me search POST search format action gt create
  • Heroku Rails 应用程序级别不记录日志

    我在 Heroku 上有一个 Rails 应用程序 它没有在应用程序级别进行日志记录 当前版本 红宝石1 9 3 导轨3 1 3 在 config environment development rb 中有以下几行 config logge
  • 正则表达式的 o 修饰符是什么意思?

    Ruby 正则表达式有一些选项 例如i x m o i例如 意味着忽略大小写 什么是o选项是什么意思 在ri Regexp 它说o意味着执行 仅插值一次 但是当我这样做时 a one b a a two b不改变 它保持 one 我缺少什么
  • 使用 ruby​​ 调整动画 GIF 图像的大小?

    我正在尝试将 GIF 图像调整为不同的尺寸 我在 ruby 中使用 RMagick 库 但对于某些 gif 图像 即使我缩小 GIF 的大小 文件大小似乎也会增加 我正在以相同的纵横比调整图像图像的大小 这是我的代码 require rma
  • 将查询字符串参数作为表单发布的一部分发送

    有没有办法捕获查询字符串并将其作为表单帖子的一部分发送 我正在使用 Rails 2 3 5 我的用户所在的页面有多个查询字符串参数 在此页面上 他们将提交一份表格 在接收帖子的操作中 我想知道这些查询字符串参数是什么 显然 它们不是作为邮件
  • 运行规范时设计 2.0“layout_by_resource”弃用警告

    我正在使用 Rails 3 2 0 和 Devise 2 0 0 rc2 当我运行规范时 我收到一条弃用警告 当我正常启动 Rails 服务器时不会看到该警告 rake DEPRECATION WARNING Layout found at
  • ruby 认为我正在引用顶级常量,即使我指定了完整的命名空间

    在我的应用程序中我有 class User include User Foo end User Foo定义在 app models user foo rb 中 现在我正在使用一个定义自己的库Foo班级 我收到此错误 警告 User Foo
  • ruby on Rails:音频/mp3 内容标题下载

    如何在 ruby rails 中设置下载标题 在 php 中 我为 mp3 下载设置标头 如下所示 header Content Transfer Encoding binary header Content type audio mp3
  • 高效地重新安排 ActiveJob (resque/sidekiq)

    我正在玩Rails 4 2应用程序使用ActiveJob受支持resque sidekiq用于电子邮件安排 当用户创建时事通讯活动时 会创建一个新作业并安排在特定日期 这一切都很好 但是当用户更改交货日期时会发生什么 在这种情况下 每个作业
  • 如何使用 ruby​​ 和命令行工具在 mavericks 中正确安装 cocoapod?

    这是我的设置 小牛队10 9 1 Xcode 5 0 2 哪个红宝石返回这个 Users quique123 rvm rubies ruby 1 9 3 p194 bin ruby 但 dvm install ruby 返回 Already
  • Rails 3.1、Ruby 1.9.2-p180 和 UTF-8 问题

    我在使用 UTF 8 字符时遇到一些问题 这是 db seeds rb User create username eml first name last name ck email email protected cdn cgi l ema
  • Ruby on Rails - 运行 Cucumber 时出错:您已经激活了 activesupport 3.2.1,但您的 Gemfile 需要 activesupport 3.1.0。

    我知道这个问题之前已经以一种或另一种形式被问过 但我仍然无法为此找到可行的解决方案 我正在学习在线提供的 saas 课程 代码是直接从https github com saasbook hw3 rottenpotatoes https gi
  • Travis-CI 上的 Rails 数据库设置

    我正在尝试在 Rails 项目上使用 Travis 持续集成 文档说 对于 SQLite3 测试数据库必须配置如下 test adapter sqlite3 database memory timeout 500 但我想保留本地测试的默认配
  • Ruby 动态变量名

    有没有办法在 Ruby 中创建具有动态名称的变量 我正在读取一个文件 当我找到一个字符串时 会生成一个哈希值 e g file File new games log r file lines do l l split do p if p 1
  • 使用 AJAX 和 JQuery 按设定的时间间隔刷新 Rails 部分

    I have a page in my rails application that looks like 现在 我有另一个用 python 编码的人工智能应用程序 它处理视频 显示在 Rails 应用程序页面的左侧 并使用捕获的车辆及其相

随机推荐

  • 在 Objective C 中使用 static init 有什么好处?

    最近我发现来自 Github 的 webrtc ios 示例 https github com gandg webrtc ios 当我浏览该项目时 我注意到 VideoView 类使用静态方法 但我不确定这是否必要 VideoView 是
  • Postgis - 如何通过 JDBC 使用数据类型“地理”

    从事一个网络项目 该项目使用postgresql 9 3 postgis 2 1 有一个类型的列geography在表中 它只存储一个point 现在我需要通过 JDBC 使用 Java 对象插入 选择类型 看完之后postgis手册 没有
  • 手动身份验证检查 Symfony 2

    我正在开发一个 Symfony 2 应用程序 用户必须在登录过程中选择一个配置文件 用户可能有多个配置文件可供使用 并且他们只知道自己的配置文件 因此 首先 我需要提示输入用户名和密码 如果这些正确 我不应该登录用户 我需要提示用户在会话期
  • NodeJs 中单线程和非阻塞 I/O 操作有什么区别?

    我一直在阅读并浏览尽可能多的 NodeJs 代码 但我对此有点困惑 Node 单线程和非阻塞 I O 到底意味着什么 我可以通过生成子进程来实现第一个 通过使用异步库来实现第二个 但我想弄清楚它的含义以及非阻塞 I O 如何仍然会减慢您的应
  • 创建产品 SDK:如何使用我正在创建的 SDK 添加本机库 (.so) 和 jar?

    我正在创建一个小部件 我们将提供给开发人员最终用户 它由 jar和一个本机库 so 使用 NDK 构建 JAR 有一个动态库的 JNI 接口 关于如何包含外部内容非常清楚 jar在项目中但没有如何包含依赖的动态库 我如何打包并构建 jar
  • EF Core 3 - 在Where子句中使用字符串的扩展方法

    我有一个简单的字符串扩展方法 public static class FrenchStringExtensions public static string ReplaceAccents this string str return str
  • Rails 3.1 Asset Pipeline 和 Uglifier 中可能存在的错误

    我在 Heroku 上部署时遇到了问题 导致 rake 任务失败 rake assets precompile 底部是集成时出现的错误 轨道3 1 Jquery 日历 https github com themouette jquery w
  • React 自定义挂钩内的 Apollo GraphQL 查询

    我正在尝试列出 Rick Morty API 中的所有角色 我编写了以下钩子以在我的组件中使用 该组件将呈现结果 当我对值进行硬编码时 例如 page 1 filter name Rick 查询运行得很好 如果我尝试使用变量 它会返回错误
  • 使用 WCF 使用 RESTful JSON API

    我是 WCF 的新手 而且一般对 NET 很生疏 所以很可能这是一个已回答的问题 但我只是错过了它 我正在构建一个 ASP NET MVC 应用程序 它将使用基于 RESTful JSON 的 API 作为后端 我一直在研究如何与 NET
  • 具有特定基数的映射(联结)表之间的联接

    我有一个关于执行特定联接的最有效方法的简单问题 就拿这三张表来说 为了保护无辜 已经改了实名 表 动物 animal id name 1 bunny 2 bear 3 cat 4 mouse 表 标签 tag id tag 1 fluffy
  • 将应用程序见解跟踪日志记录添加到 .net core 控制台应用程序

    我有一个 net core 控制台应用程序 不是 AspNetCore 我想添加应用程序见解日志记录 将跟踪日志推送到应用程序见解 我尝试过使用 Microsoft ApplicationInsights AspNetCore 但是当我这样
  • 释放对执行进程任务中使用的变量的锁定SSIS

    我有一个包裹Foreach容器 and 执行流程任务 inside 对于每个容器 在执行流程任务中出现一些错误时 它会重定向到OnError事件处理程序对于每个容器 我正在使用 exe 捕获错误标准误差变量任务的属性并在脚本任务中使用它On
  • 在 Python 中读取和/或更改 Windows 8 主卷 [重复]

    这个问题在这里已经有答案了 如何使用 python 更改笔记本电脑上的主音量 我知道一种方法 我使用 ctypes 模拟音量增大 音量减小按键 但在不知道当前音量的情况下 每当我启动应用程序进行校准时 我都必须让代码执行 50 次连续的音量
  • 将数据集转换为 XML

    我已经被这个问题困扰了几个小时 似乎无法弄清楚 所以我在这里问 好吧 我有这个功能 private void XmlDump XDocument doc new XDocument new XDeclaration 1 0 utf 8 ye
  • git 推送错误:src refspec main 与 Linux 上的任何内容都不匹配

    每当我尝试使用上传文件时git push u origin main我收到错误如下 error src refspec main does not match any error failed to push some refs to gi
  • 邮递员 Windows 身份验证 (NTLM) 不起作用

    我已经从 Visual Studio 模板创建了一个全新的 WebAPI 项目 目标框架netcoreapp3 1 我已经配置了窗口身份验证 我在 Postman 中使用 NTLM 配置创建了一个请求来调用我的 API 当我调试应用程序并通
  • 如何从字符串中删除特定字符(仅当它是字符串中的第一个或最后一个字符时)。

    假设我有一个字符串1 2 3 我想删除最后一个 或者如果字符串看起来像 1 2 3 or 1 2 3我还是想得到1 2 3作为我的结果 请尝试在您的回答中进行一些解释 我不想只是在不理解的情况下复制粘贴内容 谢谢 处理这样的 修剪 逗号的一
  • 在bash中,如何使用一个变量作为另一个变量名称的一部分?

    只是一个简单的问题 我有一些数组 array 0 1 2 3 array 1 1 2 3 我有一个变量a a 0 echo array a 0 出现严重替换错误 有谁知道正确的语法吗 您可以做的一件事是使用以下语法 array a arra
  • Windows Vista 中%allusersprofile% 文件夹的位置?

    Windows Vista 中 allusersprofile 文件夹的确切路径是什么 在某些系统上 我看到该文件夹 为 c Users All Users 在某些系统上它被映射到 C ProgramData 而在其他系统上它被映射到 C
  • Rails ActiveRecord 协会

    好的 这是我的问题 我有 3 个不同的模型 人员 角色 客户和商店 客户有很多商店 也可以有很多人 商店里人很多 人们有各种各样的角色 1 人可以在多个商店工作 并且他们在每个商店可能具有不同的角色 例如 乔可能是一家商店的助理经理和另一家