开发者

Array conditions placeholder substitution problem (Rails3 Active Record)

开发者 https://www.devze.com 2023-03-21 19:41 出处:网络
Could anyone please tell why this codewon\'t work: scope :scope开发者_StackOverflow社区_a, lambda {|x, y| select(\'DISTINCT ?\', x).order(\'? ASC\', y)}

Could anyone please tell why this code won't work:

scope :scope开发者_StackOverflow社区_a, lambda {|x, y| select('DISTINCT ?', x).order('? ASC', y)}

(says ArgumentError: wrong number of arguments (2 for 1)), whereas this

scope :scope_b, lambda {|x, y| where(:cond1 => x).where(:cond2 => y)}

works perfectly?

How does one construct a proper scope with conditions like the 1st example (when seemingly it's impossible to use hash conditions)?

UPD The safe solution turned out to be trivial:

scope :myscope, lambda{|field, mode| {:select => field, :conditions => {:moderated => mode}, :order => field}}

..but doesn't this way of setting scope conditions get deprecated (not sure) in future RoR versions?


The approach you're taking only works for the where(...) method, not for select(...) (which is what's throwing the error) or for order(...).

You'll probably want to do this (since an order clause will default to be ascending, you can just pass in y directly):

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

精彩评论

暂无评论...
验证码 换一张
取 消