有人可以告诉为什么这段代码不起作用:
scope :scope_a, lambda {|x, y| select('DISTINCT ?', x).order('? ASC', y)}
(说ArgumentError:错误的参数数量(2表示1)),而这
scope :scope_b, lambda {|x, y| where(:cond1 => x).where(:cond2 => y)}
工作得很好吗?
如何使用类似第一个示例的条件构建适当的范围(当看似不可能使用哈希条件时)?
UPD 安全的解决方案变得微不足道了:
scope :myscope, lambda{|field, mode| {:select => field, :conditions => {:moderated => mode}, :order => field}}
..但是这种设置范围条件的方式在未来的RoR版本中是否会被弃用(不确定)?
答案 0 :(得分:1)
您所采用的方法仅适用于where(...)
方法,不适用于select(...)
(这是引发错误的方法)或适用于order(...)
。
您可能希望这样做(因为order
子句默认为升序,您可以直接传递y
):
scope :scope_a, lambda {|x, y| select("DISTINCT #{x}").order(y)}