2015-03-06 6 views
0

мне нужно изменить его к рельсам 4 СтильNamed_scope с лямбда рельсами 4

название модели Invoice

У меня есть

named_scope :with_name_like, lambda { |name| 
    name.blank? ? {} : { :conditions => ['LOWER(name) LIKE ?', "%#{name.downcase}%"], :joins => :client } 
    } 

Я сделал

def self.with_name_like 
    ->(name){where('LOWER(name) LIKE ?', "%#{name.downcase}%").joins(:client)} 
    end 

но получать

Invoice.with_name_like 
=> #<Proc:[email protected]/home/stasyan/current/app/models/invoice.rb:23 (lambda)> 

Как поставить тернарный оператор на этот метод? с лямбдой?

и как сделать это последний синтаксис

named_scope :ordered, :order => "date DESC" 

Благодаря

ответ

1

Вы можете просто использовать all:

scope :with_name_like, ->(name) { 
    name.blank? ? all : where('LOWER(name) LIKE ?', "%#{name.downcase}%").joins(:client) 
} 
0

Я предлагаю

def self.with_name_like(name) 
    if name 
    where('LOWER(name) LIKE ?', "%#{name.downcase}%").joins(:client) 
    else 
    self 
    end 
end 

Я предпочитаю метод класса по параметризованному определению области.

Смежные вопросы