ruby-on-rails - 基于其他模型创建动态范围
问题描述
在 Rails (5.0) 应用程序中,我有以下内容
class Batch < ApplicationRecord
belongs_to :zone, optional: false
end
class Zone < ApplicationRecord
scope :lines, -> { where(kind: 'line') }
end
现在我需要为每一条线定义Batch
一个范围。Zone
像下面的代码一样有效。
Zone.lines.map(&:name).each do |name|
scope "manufactured_on_#{name}".to_sym, -> { joins(:zone).where("zones.name = '#{name}'") }
end
问题是上面的代码是在应用程序启动时评估的,那时范围是创建的。如果我添加一个新Zone
的 kind line
,则不会创建范围。
有没有办法解决这个问题?
解决方案
您可以将区域名称作为范围参数传递
scope :manufactured_on, -> (name) { joins(:zone).where(zones: { name: name } ) }
推荐阅读
- ios - 与 WiFi 相比,为什么 Angular HTTP 请求在移动数据上的排队时间要长得多?
- apache-spark - 为什么单个 Broker 设置在单个主题分区而不是多个分区下表现更好
- talend - How to fix Java heap space error in Talend?
- javascript - 快照测试 react 功能组件 useSelctor hook
- json - 逻辑应用程序 - 将“YYYY-MM-DD HH:MM:SS”转换为自纪元以来的毫秒数
- azure - 在 Azure Blob 容器中创建三个文件时,如何在 Azure 数据工厂中创建事件触发器?
- xamarin - 如何在 xamarin.forms 的设备浏览器中打开缩放会议 URL?
- exception - System.Threading.Tasks.TaskCanceledException:无法访问已处置的对象。对象名称:xamarin 表单中的“MobileAuthenticatedStream”
- c# - 如何让 VS 代码支持统一语句
- objective-c - Xcode 构建路径和复制附加文件