数组条件占位符替换问题(Rails3 Active Record)

时间:2011-07-20 04:40:57

标签: ruby-on-rails-3 activerecord

有人可以告诉为什么这段代码不起作用:

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版本中是否会被弃用(不确定)?

1 个答案:

答案 0 :(得分:1)

您所采用的方法仅适用于where(...)方法,不适用于select(...)(这是引发错误的方法)或适用于order(...)

您可能希望这样做(因为order子句默认为升序,您可以直接传递y):

scope :scope_a, lambda {|x, y| select("DISTINCT #{x}").order(y)}