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
相关产品推荐
相关产品推荐

