Проблема замены заполнителя в условиях массива (Rails3 Active Record) - PullRequest
1 голос
/ 20 июля 2011

Может кто-нибудь сказать, почему этот код не будет работать:

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

отлично работает?

Как построить правильную область видимости с условиями, подобными 1-му примеру (когда, казалось бы, невозможно использовать хеш-условия)?

UPD Безопасное решение оказалосьтривиально:

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

.. но разве этот способ установки условий области не устареет (не уверен) в будущих версиях RoR?

1 Ответ

1 голос
/ 20 июля 2011

Подход, который вы используете, работает только для метода where(...), а не для select(...) (что и вызывает ошибку) или для order(...).

Возможно, вы захотите сделать это (поскольку предложение order по умолчанию будет восходящим, вы можете просто передать y напрямую):

scope :scope_a, lambda {|x, y| select("DISTINCT #{x}").order(y)}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...