2011-07-20 23 views
1

誰能告訴爲什麼這個代碼將無法正常工作:陣列條件佔位符替代問題(Rails3中的Active Record)

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}} 

..但不設定範圍條件的這種方式獲得未來的回報率的版本棄用(不知道)?

回答

1

你所採取的方法只適用於where(...)方法,而不適用於select(...)(這是拋出錯誤)或order(...)

你可能會想這樣做(因爲一個order條款中將默認上升,你可以通過在y直接):

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