Rails 5:如何将此named_scope转换为作用域
Rails 5: How to convert this named_scope to a scope
我希望是一个简单的问题。
如何将此 named_scope 行从 rails 2 应用程序转换为 rails 5
的范围行
原创...
named_scope :effective_on, lambda { |date|
{ :conditions => ['(effective_on IS NULL OR effective_on <= ?) AND (ineffective_on IS NULL OR ineffective_on > ?)', date, date] }
}
我试过了,但它只是将条件行作为字符串打印出来...
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 不推荐使用“条件”,但是当我尝试在这个版本中用“where”替换它时,它在我面前爆炸了...
scope :effective_on, lambda { |date|
{ where('(effective_on IS NULL OR effective_on <= ?) AND (ineffective_on IS NULL OR ineffective_on > ?)', date, date) }
}
... 在我的脸上爆炸:在我的 IDE 中整个“哪里”线亮起红色,它告诉我“预期:=>”
这就是我难过的地方。
问题是旧 Rails 版本中的范围 return 像 { :conditions => 'some conditions }
一样散列,但在较新版本中它 return 是一个活动记录关系(就像 where
方法的 return 值)
所以你必须改变:
scope :effective_on, lambda { |date|
{ :conditions => ['(effective_on IS NULL OR effective_on <= ?) AND (ineffective_on IS NULL OR ineffective_on > ?)', date, date] }
}
到
scope :effective_on, lambda { |date|
where('(effective_on IS NULL OR effective_on <= ?) AND (ineffective_on IS NULL OR ineffective_on > ?)', date, date)
}
没有那个 {
}
where
调用
我希望是一个简单的问题。
如何将此 named_scope 行从 rails 2 应用程序转换为 rails 5
的范围行原创...
named_scope :effective_on, lambda { |date|
{ :conditions => ['(effective_on IS NULL OR effective_on <= ?) AND (ineffective_on IS NULL OR ineffective_on > ?)', date, date] }
}
我试过了,但它只是将条件行作为字符串打印出来...
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 不推荐使用“条件”,但是当我尝试在这个版本中用“where”替换它时,它在我面前爆炸了...
scope :effective_on, lambda { |date|
{ where('(effective_on IS NULL OR effective_on <= ?) AND (ineffective_on IS NULL OR ineffective_on > ?)', date, date) }
}
... 在我的脸上爆炸:在我的 IDE 中整个“哪里”线亮起红色,它告诉我“预期:=>”
这就是我难过的地方。
问题是旧 Rails 版本中的范围 return 像 { :conditions => 'some conditions }
一样散列,但在较新版本中它 return 是一个活动记录关系(就像 where
方法的 return 值)
所以你必须改变:
scope :effective_on, lambda { |date|
{ :conditions => ['(effective_on IS NULL OR effective_on <= ?) AND (ineffective_on IS NULL OR ineffective_on > ?)', date, date] }
}
到
scope :effective_on, lambda { |date|
where('(effective_on IS NULL OR effective_on <= ?) AND (ineffective_on IS NULL OR ineffective_on > ?)', date, date)
}
没有那个 {
}
where
调用