2015-03-08 3 views
0

В приложение/контроллеры/ElementTypesController.rb, у меня есть это:Область применения и SQL запросов в Rails 4

l = params[:element_type_name] 
@element_types = ElementType.by_name(l).page(params[:page]) 

и в модели приложения/модели/ElementType.rb, у меня есть:

scope :by_name, (lambda do |name| { :conditions => ['name LIKE ?', "%#{name}%"]} end) 

Ошибка при создании сообщения не установлен. Что не так с моей областью?

ответ

0

В Rails 4 Вы должны использовать другой синтаксис для условий объявить SQL (смотрите на where метод):

scope :by_name, ->(name) { where('name LIKE ?', "%#{name}%") } 

Итак, у вас есть can't happen on a hash, потому что Rails 4 не признает этот синтаксис больше. Он устарел.

+0

это не будет работать, ваша сфера не принимает параметр! –

+0

@maxd и Sharvy Ahmed, я использовал исправление для ответа Макса, и он работает. scope: by_name -> (name) {where ...} Почему это работает, тогда как мой предыдущий подход не работает? Спасибо вам обоим за ответ так быстро. – sploiber

+0

Да, я тоже это исправить. –

0

Я считаю, что сфера является всего лишь псевдоним, поэтому его также можно сделать как этот

def self.by_name (name) 
    where('name LIKE ?', "%#{name}") 
end 
Смежные вопросы