You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails 5 中如何将Rails 2的named_scope转换为可用的scope

正确的Rails 5 scope写法

修正后的可运行代码如下:

scope :effective_on, lambda { |date|
  where('(effective_on IS NULL OR effective_on <= ?) AND (ineffective_on IS NULL OR ineffective_on > ?)', date, date)
}

也可以用Rails社区更常用的简写lambda语法:

scope :effective_on, ->(date) {
  where('(effective_on IS NULL OR effective_on <= ?) AND (ineffective_on IS NULL OR ineffective_on > ?)', date, date)
}

错误原因说明

  • Rails 3及之后的版本已经废弃了named_scope写法,同时不再支持scope返回:conditions哈希的格式,直接链式调用where/order等查询方法即可,不需要包裹在哈希结构中。
  • 你之前改写时给where语句外层加了多余的大括号{},Ruby会将大括号内容识别为哈希字面量,要求内部是键 => 值的结构,所以IDE会报"Expected: =>"的语法错误,去掉多余的大括号即可。

内容的提问来源于stack exchange,提问作者thefonso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:18:01