Как я могу сделать Model.find (: кроме => 'desc') в рельсах 2.3.x? - PullRequest
2 голосов
/ 15 июня 2011

Ниже приведен отличный способ ускорить доступ к базе данных, просто «выбрав» указанные столбцы в таблице:

Article.find(:all, :select => 'name')

Это позволит найти все статьи и вернуть только имя.Даже если он имеет атрибут body, он будет жаловаться на то, что он является неопределенным атрибутом из-за выбора.

Как бы вы сделали :select => 'name', но наоборот;Это означает, что я хочу выбрать все, кроме определенного столбца, например, «: кроме =>».Я хочу быть в состоянии сделать это:

Article.find(:all, :except => 'body')

Дайте мне знать, если это не имеет смысла.

1 Ответ

1 голос
/ 15 июня 2011
def find_with_except(*args)
  options = args.extract_options!
  raise "Find accepts select or except but not both." if options[:except] && options[:select]
  if options[:except]
    formated_options = Array(options.delete(:except)).map!(&:to_s)
    options[:select] = (Article.column_names - formated_options).join(", ")
    find_without_except(*(args << options))
  else
    find_without_except(*(args << options))
  end
end
alias_method_chain :find, :except

И тогда вы можете использовать его так:

Model.find(:all, :except => 'body')
...