Rails 5:如何将named_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中,line亮起红色,它告诉我"Expected: =>">

这就是我被难住的地方。

问题是,在旧的Rails版本的范围返回一个散列,如{ :conditions => 'some conditions },但在较新的版本,它返回一个活动的记录关系(如where方法的返回值)

所以你必须改变:

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呼叫

相关内容

  • 没有找到相关文章

最新更新