2012-03-21 2 views
5

У меня есть следующий названный объем:Именованная - неправильное число переменных связывания

named_scope :report_search, lambda { |search| 
    { 
    :conditions => ["rep_name like ? or rep_id like ? or rep_symbol like ? or rep_issue like ?", search] 
    } 
} 

Когда я бегу, я получаю сообщение об ошибке:

wrong number of bind variables 

Я был бы признателен, если кто-то мог помогите мне понять, что с кодом не так.

Большое спасибо

ответ

8

Вам нужно одну переменную для каждого знака вопроса в вашем заявлении связывания. Если они все-таки, вы должны повторять их несколько раз:

named_scope :report_search, lambda { |search| 
    { 
    :conditions => ["rep_name like ? or rep_id like ? or rep_symbol like ? or rep_issue like ?", search, search, search, search] 
    } 
} 
+1

Благодарим за быстрый ответ. Есть ли другой способ выполнить условие «или» без повторения аргумента? – Kim

+0

Кандада избил меня до удара. Вот как вы это сделаете, только повторяя его один раз. – Veraticus

14

Вы можете использовать имена переменных связывания, если вы не хотите, чтобы повторить ввод.

named_scope :report_search, lambda { |search| 
    { 
    :conditions => [" rep_name LIKE :search OR 
         rep_id  LIKE :search OR 
         rep_symbol LIKE :search OR 
         rep_issue LIKE :search", :search => search] 
    } 
}