我希望这个问题很简单。
我如何将这个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
呼叫