首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 5:如何将此named_scope转换为作用域

Rails 5:如何将此named_scope转换为作用域
EN

Stack Overflow用户
提问于 2021-10-16 23:57:59
回答 1查看 26关注 0票数 1

我希望是个简单的问题。

如何将这行named_scope代码从Rails2应用程序转换为Rails5的范围代码行

原创..。

代码语言:javascript
复制
  named_scope :effective_on, lambda { |date|
    { :conditions => ['(effective_on IS NULL OR effective_on <= ?) AND (ineffective_on IS NULL OR ineffective_on > ?)', date, date] }
  }

我已经尝试过了,但它只是将条件行作为字符串打印出来...

代码语言:javascript
复制
  scope :effective_on, lambda { |date|
    { :conditions => ['(effective_on IS NULL OR effective_on <= ?) AND (ineffective_on IS NULL OR ineffective_on > ?)', date, date] }
  }

我怀疑这是因为Rails 5.0不推荐使用"conditions“,但当我试图在这个版本中用"where”替换它时,它在我面前爆炸了……

代码语言:javascript
复制
  scope :effective_on, lambda { |date|
    { where('(effective_on IS NULL OR effective_on <= ?) AND (ineffective_on IS NULL OR ineffective_on > ?)', date, date) }
  }

..。整个"where“行在我的集成开发环境中亮起红色,它告诉我"Expected:=>”

这就是我被难住的地方。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-17 00:27:00

问题在于,旧版Rails中的作用域返回了类似{ :conditions => 'some conditions }的散列,但在较新版本中,它返回了活动记录关系(类似于where方法的返回值)。

所以你必须改变:

代码语言:javascript
复制
scope :effective_on, lambda { |date|
  { :conditions => ['(effective_on IS NULL OR effective_on <= ?) AND (ineffective_on IS NULL OR ineffective_on > ?)', date, date] }
}

代码语言:javascript
复制
scope :effective_on, lambda { |date|
  where('(effective_on IS NULL OR effective_on <= ?) AND (ineffective_on IS NULL OR ineffective_on > ?)', date, date)
}

如果没有围绕where调用的{ }

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69600394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档