如何确定 Rails 3 中 ActiveRecord 关联的范围?

2024-01-05

我有一个 Rails 3 项目。 Rails 3 带来了 Arel 以及重用一个范围来构建另一个范围的能力。我想知道在定义关系时是否有办法使用范围(例如“has_many”)。

我有带有权限列的记录。我想构建一个 default_scope 来考虑我的权限列,以便过滤记录(甚至是通过关系访问的记录)。

目前,在Rails 3中,default_scope(包括我发现的补丁)没有提供传递过程(我需要后期变量绑定)的可行方法。是否可以定义一个可以将命名范围传递到其中的 has_many ?

重用命名范围的想法如下:

Orders.scope :my_orders, lambda{where(:user_id => User.current_user.id)}
has_many :orders, :scope => Orders.my_orders

或者隐式编码关系中的命名范围如下所示:

has_many :orders, :scope => lambda{where(:user_id => User.current_user.id)}

我只是尝试将 default_scope 与后期绑定一起应用。我更愿意使用 Arel 方法(如果有的话),但会使用任何可行的选项。

由于我指的是当前用户,因此我不能依赖在最后可能时刻未评估的条件,例如:

has_many :orders, :conditions => ["user_id = ?", User.current_user.id]

我建议你看一下“命名范围已死” http://www.railway.at/2010/03/09/named-scopes-are-dead/

作者在那里解释了 Arel 有多么强大:)

我希望它会有所帮助。

编辑 #1 三月 2014

正如一些评论指出的那样,现在的差异是个人品味的问题。

然而,我个人仍然建议避免将 Arel 的范围暴露给上层(作为控制器或直接访问模型的其他任何东西),这样做需要:

  1. 创建一个范围,并通过模型中的方法公开它。该方法将是您向控制器公开的方法;
  2. 如果您从不将模型暴露给控制器(因此在它们之上有某种服务层),那么就没有问题。反腐层is您的服务,它可以访问模型的范围,而不必过多担心范围的实现方式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何确定 Rails 3 中 ActiveRecord 关联的范围? 的相关文章

随机推荐

  • 我可以使用什么 CSS 来缩放画布以填充其容器而不改变其纵横比?

    我有一个特定尺寸的画布 比如说 300x150 我可以使用什么 CSS 来缩放画布以填充其容器 而不改变其纵横比 并将其水平和垂直居中 以获得缩放后剩余的任何额外空间 我试过这个 box sizing border box moz box
  • Android 4.4.2 中 Google API(x86 系统映像)和 Google API(ARM 系统映像)之间的差异

    我正在关注这个 http developer android com google play services setup html Install http developer android com google play servic
  • 只读内存和堆内存

    AFAIK 在 C 语言中 字符串文字存储在只读存储器中 它实际上存在于硬件上的什么位置 根据我的知识堆在 RAM 上 如果我错了 请纠正我 堆和只读内存有什么不同 它依赖于操作系统吗 这通常是在硬件辅助下完成的 可以告诉硬件的虚拟内存子系
  • 如何防止对我的用node.js编写的http服务器进行DOS攻击?

    使用node js 用于构建可以处理http请求的tcp服务器的net模块 我想防止 ddos 攻击 所以我所做的是这样的 if status numOfCurrentRequests 1 gt MAX NUM OF CONNECTIONS
  • 如何在CSS中创建双底边框

    我想在标题底部创建一个双边框 其中有两条不同粗细的线 其间有 1px 的空间 具体来说 顶线的厚度为 2px 底线的厚度为 1px 这是我想要达到的美学目标的图像示例 其他使用此设计方面的网站 http www rollingstone c
  • MSBuild 使用凭据调用 Powershell

    我正在尝试使用运行 Powershell 命令的 MSBuild 脚本来部署 Windows 服务 MSBuild 脚本部署我需要的文件 PowerShell 脚本将使用以下命令卸载并重新安装 Windows 服务 Invoke Comma
  • 使用参数循环进行量角器测试

    我有一组几乎完全相同的烟幕测试 我想将它们放入循环中并在参数数组中循环 但是 测试是异步运行的 因此循环在测试运行之前完成 这导致测试对第 8 个参数运行 8 次 而不是每个参数运行一次 describe Admin Console Cam
  • AngularJS 中的简单 dom 操作 - 单击按钮,然后将焦点设置到输入元素

    我有这个角度代码 div class element wrapper div class first wrapper div class button element name div div div class second wrappe
  • Android - 尝试添加图像时会创建空白图像

    我使用的是Android Studio 1 5 我正在尝试做一些非常简单的事情 向我的项目添加一个大图像 我将使用它作为我的 MainActivity 的背景 当我右键单击 res gt Add gt Image Asset 并选择 操作栏
  • Google Admin SDK Push API 发送“同步”网络钩子,但仅此而已

    我的应用程序使用推送通知 API 在文档中也称为频道订阅或 Webhooks 和报告 API 来获取有关身份验证令牌的实时更新 每 6 小时 我们的应用程序就会发出一个请求https www googleapis com admin rep
  • 为什么子进程忽略 PATH,我该如何更改它?

    我需要更改 Python 应用程序调用的程序 很遗憾我无法更改 Python 代码 我只能改变调用环境 特别是 PATH 但不幸的是Python的子进程模块似乎忽略了PATH 至少在某些情况下 我怎样才能强迫Python尊重PATH当搜索要
  • 分布式MAKE

    我之前有一个 MAKE 编译过程 大约需要 1 小时才能完成 我使用 j 命令并能够将其减少到 40 分钟 我观察到 CPU 利用率很高 我的导师建议我将作业分配到我们组织可用的不同服务器或机器上 我读过有关 distcc 的内容 但它只能
  • Ruby 数组 - 求对角线之和

    以前没见过这个 但我想知道如何在 Ruby 中找到 2D 数组的两个对角线之和 假设您有一个简单的数组 包含 3 行和 3 列 array 1 2 3 4 5 6 7 8 9 我可以使用以下方法将其分成三组 array each slice
  • Android - 如何知道mapView是否正确加载?

    我在检测我的 Android 地图应用程序中是否加载了 MapView 时遇到了麻烦 在OnCreate方法中 当我分配地图URL时 我想知道是否发生了任何问题 由于我的互联网连接或任何其他问题 例如从 REST 服务加载地图 可能会出现问
  • 如何从服务器下载XML文件并将其保存到SD卡中?

    在我的应用程序中 我尝试从服务器下载 XML 文件并将其存储在 SD 卡中 为此 我使用以下代码 try File root android os Environment getExternalStorageDirectory File d
  • Swift 中单例类的委托

    如何使用单例 共享类的委托方法 有一个单例类定义了一些协议 但我不知道如何访问其他类中的委托函数 供参考的代码片段 swift protocol AClassDelegate func method1 class A static let
  • 共享意图不适用于将视频上传到 YouTube

    我正在尝试共享正在创建并存储在外部 SD 卡上的视频 其路径已通过获取 Environment getExternalStoragePublicDirectory Environment DIRECTORY MOVIES getAbsolu
  • 通过一个脚本为 apache 提供域下的所有路径

    我通过一家托管公司 1 在 Linux apache 服务器上托管一个网站 到目前为止 我通过一个带参数的脚本提供不同的内容 示例网址是 www mydomain com pages php date 1 10 2008 现在我想将 url
  • InetAddress.getByName 在代理后面失败

    我正在尝试将主机名解析为其相应的 IP 我的环境是公司网络中代理服务器后面的一台 Mac 通过系统首选项 自动代理配置 配置了 pac 文件 到目前为止 一切工作正常 我可以访问公司网络内部和外部的资源 解析我的网络中的主机工作得很好 In
  • 如何确定 Rails 3 中 ActiveRecord 关联的范围?

    我有一个 Rails 3 项目 Rails 3 带来了 Arel 以及重用一个范围来构建另一个范围的能力 我想知道在定义关系时是否有办法使用范围 例如 has many 我有带有权限列的记录 我想构建一个 default scope 来考虑